// $ANTLR 3.2 Sep 23, 2009 12:02:23 C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g 2010-04-19 14:02:03

// The variable 'variable' is assigned but its value is never used.
#pragma warning disable 168, 219
// Unreachable code detected.
#pragma warning disable 162


using System.Collections.Generic;


using System;
using Antlr.Runtime;
using IList 		= System.Collections.IList;
using ArrayList 	= System.Collections.ArrayList;
using Stack 		= Antlr.Runtime.Collections.StackList;

using IDictionary	= System.Collections.IDictionary;
using Hashtable 	= System.Collections.Hashtable;

using Antlr.Runtime.Tree;

namespace 
	SqlAntlr

{
public partial class SqlParser : Parser
{
    public static readonly string[] tokenNames = new string[] 
	{
        "<invalid>", 
		"<EOR>", 
		"<DOWN>", 
		"<UP>", 
		"ALIAS", 
		"ARG", 
		"ARRAY", 
		"COMP", 
		"CONSTANT", 
		"CURRENCY", 
		"DECIMAL", 
		"GROUPBY", 
		"HEXADECIMAL", 
		"HINT", 
		"NOARG", 
		"OBJECT", 
		"ORDERBY", 
		"QUERY", 
		"QUERYSPEC", 
		"R", 
		"REAL", 
		"SELECTITEM", 
		"SIGN_MINUS", 
		"SIGN_PLUS", 
		"STRING", 
		"SUBQUERY", 
		"SYSVAR", 
		"TABLE", 
		"TABLECOLS", 
		"TABLEFUNCTION", 
		"TYPE", 
		"VARASSIGN", 
		"ADD", 
		"ALL", 
		"ALTER", 
		"AND", 
		"ANY", 
		"AS", 
		"ASC", 
		"AUTHORIZATION", 
		"AUTO", 
		"BACKUP", 
		"BASE64", 
		"BEGIN", 
		"BETWEEN", 
		"BINARY", 
		"BREAK", 
		"BROWSE", 
		"BULK", 
		"BY", 
		"CASCADE", 
		"CASE", 
		"CAST", 
		"CHECK", 
		"CHECKPOINT", 
		"CLOSE", 
		"CLUSTERED", 
		"COLLATE", 
		"COLUMN", 
		"COMMIT", 
		"COMPUTE", 
		"CONCAT", 
		"CONSTRAINT", 
		"CONTAINS", 
		"CONTAINSTABLE", 
		"CONTINUE", 
		"CREATE", 
		"CROSS", 
		"CUBE", 
		"CURRENT", 
		"CURRENT_DATE", 
		"CURRENT_TIME", 
		"CURRENT_TIMESTAMP", 
		"CURRENT_USER", 
		"CURSOR", 
		"DATABASE", 
		"DBCC", 
		"DEALLOCATE", 
		"DECLARE", 
		"DEFAULT", 
		"DELETE", 
		"DENY", 
		"DESC", 
		"DISK", 
		"DISTINCT", 
		"DISTRIBUTED", 
		"DOUBLE", 
		"DROP", 
		"DUMP", 
		"ELEMENTS", 
		"ELSE", 
		"END", 
		"ERRLVL", 
		"ESCAPE", 
		"EXCEPT", 
		"EXEC", 
		"EXECUTE", 
		"EXISTS", 
		"EXIT", 
		"EXPAND", 
		"EXPLICIT", 
		"FAST", 
		"FASTFIRSTROW", 
		"FETCH", 
		"FILE", 
		"FILLFACTOR", 
		"FOR", 
		"FORCE", 
		"FOREIGN", 
		"FREETEXT", 
		"FREETEXTTABLE", 
		"FROM", 
		"FULL", 
		"FUNCTION", 
		"GOTO", 
		"GRANT", 
		"GROUP", 
		"HASH", 
		"HAVING", 
		"HOLDLOCK", 
		"IDENTITY", 
		"IDENTITY_INSERT", 
		"IDENTITYCOL", 
		"IF", 
		"IN", 
		"INDEX", 
		"INNER", 
		"INSERT", 
		"INTERSECT", 
		"INTO", 
		"IS", 
		"JOIN", 
		"KEEP", 
		"KEEPFIXED", 
		"KEY", 
		"KILL", 
		"LEFT", 
		"LIKE", 
		"LINENO", 
		"LOAD", 
		"LOOP", 
		"MAXDOP", 
		"MERGE", 
		"NATIONAL", 
		"NOCHECK", 
		"NOLOCK", 
		"NONCLUSTERED", 
		"NOT", 
		"NULL", 
		"OF", 
		"OFF", 
		"OFFSETS", 
		"ON", 
		"OPEN", 
		"OPENDATASOURCE", 
		"OPENQUERY", 
		"OPENROWSET", 
		"OPENXML", 
		"OPTION", 
		"OR", 
		"ORDER", 
		"OUTER", 
		"OVER", 
		"PAGLOCK", 
		"PERCENT", 
		"PLAN", 
		"PRECISION", 
		"PRIMARY", 
		"PRINT", 
		"PROC", 
		"PROCEDURE", 
		"PUBLIC", 
		"RAISERROR", 
		"RAW", 
		"READ", 
		"READCOMMITED", 
		"READPAST", 
		"READTEXT", 
		"READUNCOMMITED", 
		"RECONFIGURE", 
		"REFERENCES", 
		"REMOTE", 
		"REPEATABLEREAD", 
		"REPLICATION", 
		"RESTORE", 
		"RESTRICT", 
		"RETURN", 
		"REVOKE", 
		"RIGHT", 
		"ROBUST", 
		"ROLLBACK", 
		"ROLLUP", 
		"ROWCOUNT", 
		"ROWGUIDCOL", 
		"ROWLOCK", 
		"RULE", 
		"SAVE", 
		"SCHEMA", 
		"SELECT", 
		"SERIALIZABLE", 
		"SESSION_USER", 
		"SET", 
		"SETUSER", 
		"SHUTDOWN", 
		"SOME", 
		"STATISTICS", 
		"SYSTEM_USER", 
		"TABLOCK", 
		"TABLOCKX", 
		"TEXTSIZE", 
		"THEN", 
		"TIES", 
		"TO", 
		"TOP", 
		"TRAN", 
		"TRANSACTION", 
		"TRIGGER", 
		"TRUNCATE", 
		"TSEQUAL", 
		"UNION", 
		"UNIQUE", 
		"UPDATE", 
		"UPDATETEXT", 
		"UPDLOCK", 
		"USE", 
		"USER", 
		"VALUES", 
		"VARYING", 
		"VIEW", 
		"VIEWS", 
		"WAITFOR", 
		"WHEN", 
		"WHERE", 
		"WHILE", 
		"WITH", 
		"WRITETEXT", 
		"XLOCK", 
		"XML", 
		"XMLDATA", 
		"F_CONNECTIONS", 
		"F_CPU_BUSY", 
		"F_CURSOR_ROWS", 
		"F_DATEFIRST", 
		"F_DBTS", 
		"F_ERROR", 
		"F_FETCH_STATUS", 
		"F_IDENTITY", 
		"F_IDLE", 
		"F_IO_BUSY", 
		"F_LANGID", 
		"F_LANGUAGE", 
		"F_LOCK_TIMEOUT", 
		"F_MAX_CONNECTIONS", 
		"F_MAX_PRECISION", 
		"F_NESTLEVEL", 
		"F_OPTIONS", 
		"F_PACK_RECEIVED", 
		"F_PACK_SENT", 
		"F_PACKET_ERRORS", 
		"F_PROCID", 
		"F_REMSERVER", 
		"F_ROWCOUNT", 
		"F_SERVERNAME", 
		"F_SERVICENAME", 
		"F_SPID", 
		"F_TEXTSIZE", 
		"F_TIMETICKS", 
		"F_TOTAL_ERRORS", 
		"F_TOTAL_READ", 
		"F_TOTAL_WRITE", 
		"F_TRANCOUNT", 
		"F_VERSION", 
		"SEMICOLON", 
		"LPAREN", 
		"RPAREN", 
		"COMMA", 
		"Integer", 
		"STAR", 
		"Variable", 
		"COLON", 
		"ASSIGNEQUAL", 
		"DOT_STAR", 
		"PLUS", 
		"MINUS", 
		"AMPERSAND", 
		"BITWISEOR", 
		"BITWISEXOR", 
		"DIVIDE", 
		"MOD", 
		"DOT", 
		"UnicodeStringLiteral", 
		"ASCIIStringLiteral", 
		"NonQuotedIdentifier", 
		"QuotedIdentifier", 
		"Real", 
		"HexLiteral", 
		"Currency", 
		"ODBCDateTime", 
		"TILDE", 
		"NOTEQUAL1", 
		"NOTEQUAL2", 
		"LESSTHANOREQUALTO1", 
		"LESSTHANOREQUALTO2", 
		"LESSTHAN", 
		"GREATERTHANOREQUALTO1", 
		"GREATERTHANOREQUALTO2", 
		"GREATERTHAN", 
		"Whitespace", 
		"SingleLineComment", 
		"FRAG_ML_COMMENT", 
		"MultiLineComment", 
		"Letter", 
		"Digit", 
		"Exponent", 
		"Number"
    };

    public const int FUNCTION = 113;
    public const int FREETEXT = 109;
    public const int STAR = 277;
    public const int MOD = 288;
    public const int PRECISION = 166;
    public const int CONTAINS = 63;
    public const int F_PACKET_ERRORS = 258;
    public const int F_LANGUAGE = 250;
    public const int IDENTITYCOL = 122;
    public const int CHECKPOINT = 54;
    public const int ASSIGNEQUAL = 280;
    public const int NOT = 147;
    public const int EXCEPT = 94;
    public const int EOF = -1;
    public const int FOREIGN = 108;
    public const int OPENROWSET = 156;
    public const int KILL = 135;
    public const int ROWGUIDCOL = 193;
    public const int F_ERROR = 244;
    public const int TYPE = 30;
    public const int RPAREN = 274;
    public const int CREATE = 66;
    public const int ARG = 5;
    public const int OFF = 150;
    public const int BEGIN = 43;
    public const int LOOP = 140;
    public const int WRITETEXT = 235;
    public const int RETURN = 186;
    public const int TABLEFUNCTION = 29;
    public const int NonQuotedIdentifier = 292;
    public const int GOTO = 114;
    public const int XMLDATA = 238;
    public const int DIVIDE = 287;
    public const int NOARG = 14;
    public const int ASC = 38;
    public const int UnicodeStringLiteral = 290;
    public const int TRANSACTION = 215;
    public const int KEY = 134;
    public const int F_DATEFIRST = 242;
    public const int ELSE = 90;
    public const int LOAD = 139;
    public const int BROWSE = 47;
    public const int SEMICOLON = 272;
    public const int FASTFIRSTROW = 102;
    public const int R = 19;
    public const int ROLLBACK = 190;
    public const int FILE = 104;
    public const int RESTRICT = 185;
    public const int F_ROWCOUNT = 261;
    public const int READTEXT = 177;
    public const int REAL = 20;
    public const int TABLECOLS = 28;
    public const int GROUP = 116;
    public const int INTERSECT = 128;
    public const int F_CPU_BUSY = 240;
    public const int FETCH = 103;
    public const int PLAN = 165;
    public const int F_REMSERVER = 260;
    public const int READ = 174;
    public const int RECONFIGURE = 179;
    public const int USER = 225;
    public const int ALIAS = 4;
    public const int F_SERVICENAME = 263;
    public const int CONSTANT = 8;
    public const int VARASSIGN = 31;
    public const int SHUTDOWN = 203;
    public const int SYSTEM_USER = 206;
    public const int END = 91;
    public const int HINT = 13;
    public const int CONSTRAINT = 62;
    public const int XML = 237;
    public const int REPLICATION = 183;
    public const int SIGN_MINUS = 22;
    public const int ALTER = 34;
    public const int OPTION = 158;
    public const int FORCE = 107;
    public const int IDENTITY = 120;
    public const int CURRENT_USER = 73;
    public const int EXECUTE = 96;
    public const int FREETEXTTABLE = 110;
    public const int TABLE = 27;
    public const int F_TOTAL_ERRORS = 267;
    public const int SESSION_USER = 200;
    public const int ORDERBY = 16;
    public const int SYSVAR = 26;
    public const int EXPLICIT = 100;
    public const int LPAREN = 273;
    public const int SUBQUERY = 25;
    public const int AS = 37;
    public const int F_PROCID = 259;
    public const int MAXDOP = 141;
    public const int THEN = 210;
    public const int XLOCK = 236;
    public const int LEFT = 136;
    public const int TRUNCATE = 217;
    public const int DUMP = 88;
    public const int F_SPID = 264;
    public const int COLUMN = 58;
    public const int AUTO = 40;
    public const int Real = 294;
    public const int PLUS = 282;
    public const int EXISTS = 97;
    public const int MultiLineComment = 310;
    public const int ROWCOUNT = 192;
    public const int LIKE = 137;
    public const int COLLATE = 57;
    public const int ADD = 32;
    public const int HexLiteral = 295;
    public const int OUTER = 161;
    public const int REMOTE = 181;
    public const int LESSTHAN = 303;
    public const int BY = 49;
    public const int IDENTITY_INSERT = 121;
    public const int SERIALIZABLE = 199;
    public const int TO = 212;
    public const int MERGE = 142;
    public const int QUERYSPEC = 18;
    public const int AMPERSAND = 284;
    public const int FAST = 101;
    public const int SET = 201;
    public const int RIGHT = 188;
    public const int EXEC = 95;
    public const int HAVING = 118;
    public const int F_VERSION = 271;
    public const int MINUS = 283;
    public const int UPDATETEXT = 222;
    public const int QuotedIdentifier = 293;
    public const int TSEQUAL = 218;
    public const int BITWISEOR = 285;
    public const int PRINT = 168;
    public const int F_TRANCOUNT = 270;
    public const int UNION = 219;
    public const int CURRENT = 69;
    public const int NOCHECK = 144;
    public const int COLON = 279;
    public const int COMMIT = 59;
    public const int SCHEMA = 197;
    public const int DATABASE = 75;
    public const int CLOSE = 55;
    public const int DECIMAL = 10;
    public const int HOLDLOCK = 119;
    public const int DROP = 87;
    public const int ROWLOCK = 194;
    public const int WHEN = 231;
    public const int FILLFACTOR = 105;
    public const int RAISERROR = 172;
    public const int DECLARE = 78;
    public const int F_LOCK_TIMEOUT = 251;
    public const int REVOKE = 187;
    public const int BULK = 48;
    public const int PUBLIC = 171;
    public const int BETWEEN = 44;
    public const int Integer = 276;
    public const int STRING = 24;
    public const int TABLOCKX = 208;
    public const int CAST = 52;
    public const int ROBUST = 189;
    public const int CONTAINSTABLE = 64;
    public const int CLUSTERED = 56;
    public const int REPEATABLEREAD = 182;
    public const int F_MAX_PRECISION = 253;
    public const int WHILE = 233;
    public const int GREATERTHANOREQUALTO2 = 305;
    public const int COMPUTE = 60;
    public const int GREATERTHANOREQUALTO1 = 304;
    public const int VARYING = 227;
    public const int DOT_STAR = 281;
    public const int TRIGGER = 216;
    public const int CURRENT_TIME = 71;
    public const int CASE = 51;
    public const int BITWISEXOR = 286;
    public const int DEALLOCATE = 77;
    public const int TRAN = 214;
    public const int CASCADE = 50;
    public const int BREAK = 46;
    public const int Currency = 296;
    public const int SELECTITEM = 21;
    public const int F_PACK_RECEIVED = 256;
    public const int ASCIIStringLiteral = 291;
    public const int Variable = 278;
    public const int FULL = 112;
    public const int PAGLOCK = 163;
    public const int ESCAPE = 93;
    public const int INSERT = 127;
    public const int DOUBLE = 86;
    public const int SIGN_PLUS = 23;
    public const int F_NESTLEVEL = 254;
    public const int SELECT = 198;
    public const int INTO = 129;
    public const int GROUPBY = 11;
    public const int ARRAY = 6;
    public const int GREATERTHAN = 306;
    public const int EXIT = 98;
    public const int F_IDLE = 247;
    public const int SETUSER = 202;
    public const int READPAST = 176;
    public const int UNIQUE = 220;
    public const int RESTORE = 184;
    public const int VIEW = 228;
    public const int RULE = 195;
    public const int CONCAT = 61;
    public const int FRAG_ML_COMMENT = 309;
    public const int ROLLUP = 191;
    public const int NULL = 148;
    public const int LESSTHANOREQUALTO2 = 302;
    public const int WAITFOR = 230;
    public const int ON = 152;
    public const int PRIMARY = 167;
    public const int DELETE = 80;
    public const int OF = 149;
    public const int BACKUP = 41;
    public const int OPENQUERY = 155;
    public const int F_TIMETICKS = 266;
    public const int DENY = 81;
    public const int CUBE = 68;
    public const int NATIONAL = 143;
    public const int STATISTICS = 205;
    public const int OR = 159;
    public const int LESSTHANOREQUALTO1 = 301;
    public const int QUERY = 17;
    public const int OPENDATASOURCE = 154;
    public const int CHECK = 53;
    public const int CURRENCY = 9;
    public const int USE = 224;
    public const int UPDLOCK = 223;
    public const int BASE64 = 42;
    public const int KEEPFIXED = 133;
    public const int FROM = 111;
    public const int F_IDENTITY = 246;
    public const int DISTINCT = 84;
    public const int CURSOR = 74;
    public const int Letter = 311;
    public const int CURRENT_DATE = 70;
    public const int OVER = 162;
    public const int WHERE = 232;
    public const int INNER = 126;
    public const int SingleLineComment = 308;
    public const int F_MAX_CONNECTIONS = 252;
    public const int AUTHORIZATION = 39;
    public const int ORDER = 160;
    public const int F_IO_BUSY = 248;
    public const int F_CURSOR_ROWS = 241;
    public const int UPDATE = 221;
    public const int Exponent = 313;
    public const int DISTRIBUTED = 85;
    public const int FOR = 106;
    public const int OFFSETS = 151;
    public const int F_CONNECTIONS = 239;
    public const int OPENXML = 157;
    public const int AND = 35;
    public const int EXPAND = 99;
    public const int CROSS = 67;
    public const int IF = 123;
    public const int F_TOTAL_READ = 268;
    public const int INDEX = 125;
    public const int F_DBTS = 243;
    public const int RAW = 173;
    public const int F_TOTAL_WRITE = 269;
    public const int IN = 124;
    public const int Number = 314;
    public const int F_SERVERNAME = 262;
    public const int CONTINUE = 65;
    public const int OBJECT = 15;
    public const int COMMA = 275;
    public const int REFERENCES = 180;
    public const int IS = 130;
    public const int SOME = 204;
    public const int ALL = 33;
    public const int TILDE = 298;
    public const int PROC = 169;
    public const int TABLOCK = 207;
    public const int F_FETCH_STATUS = 245;
    public const int F_TEXTSIZE = 265;
    public const int DOT = 289;
    public const int Whitespace = 307;
    public const int CURRENT_TIMESTAMP = 72;
    public const int TIES = 211;
    public const int NOLOCK = 145;
    public const int WITH = 234;
    public const int VIEWS = 229;
    public const int GRANT = 115;
    public const int LINENO = 138;
    public const int PERCENT = 164;
    public const int TEXTSIZE = 209;
    public const int DEFAULT = 79;
    public const int VALUES = 226;
    public const int HASH = 117;
    public const int SAVE = 196;
    public const int HEXADECIMAL = 12;
    public const int COMP = 7;
    public const int ERRLVL = 92;
    public const int Digit = 312;
    public const int ELEMENTS = 89;
    public const int JOIN = 131;
    public const int PROCEDURE = 170;
    public const int F_OPTIONS = 255;
    public const int OPEN = 153;
    public const int ANY = 36;
    public const int DISK = 83;
    public const int NONCLUSTERED = 146;
    public const int ODBCDateTime = 297;
    public const int F_PACK_SENT = 257;
    public const int KEEP = 132;
    public const int NOTEQUAL1 = 299;
    public const int NOTEQUAL2 = 300;
    public const int F_LANGID = 249;
    public const int DESC = 82;
    public const int BINARY = 45;
    public const int READCOMMITED = 175;
    public const int TOP = 213;
    public const int DBCC = 76;
    public const int READUNCOMMITED = 178;

    // delegates
    // delegators

    protected class QueryScope_scope 
    {
        protected internal SqlQuery current;
    }
    protected Stack QueryScope_stack = new Stack();



        public SqlParser(ITokenStream input)
    		: this(input, new RecognizerSharedState()) {
        }

        public SqlParser(ITokenStream input, RecognizerSharedState state)
    		: base(input, state) {
            InitializeCyclicDFAs();
            this.state.ruleMemo = new Hashtable[358+1];
             
             
        }
        
    protected ITreeAdaptor adaptor = new CommonTreeAdaptor();

    public ITreeAdaptor TreeAdaptor
    {
        get { return this.adaptor; }
        set {
    	this.adaptor = value;
    	}
    }

    override public string[] TokenNames {
		get { return SqlParser.tokenNames; }
    }

    override public string GrammarFileName {
		get { return "C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g"; }
    }



    IList<RecognitionException> _exceptions = new List<RecognitionException>();

    public IList<RecognitionException> Exceptions 
    {
        get { return _exceptions; }
    }

    public void Clear() { _exceptions.Clear(); }

    public override void ReportError(RecognitionException e)
    {
        base.ReportError(e);
        _exceptions.Add(e);
    }

    protected override object RecoverFromMismatchedToken(IIntStream input, int ttype, BitSet follow)
    {
        Console.WriteLine("Recovery... should fail!");
        throw new MismatchedTokenException(ttype, input);
    }



    public class statement_return : ParserRuleReturnScope
    {
        public SqlQuery result;
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "statement"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:374:1: statement returns [SqlQuery result] : s= selectStatement ( SEMICOLON )* EOF -> selectStatement ;
    public SqlParser.statement_return statement() // throws RecognitionException [1]
    {   
        SqlParser.statement_return retval = new SqlParser.statement_return();
        retval.Start = input.LT(1);
        int statement_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken SEMICOLON1 = null;
        IToken EOF2 = null;
        SqlParser.selectStatement_return s = default(SqlParser.selectStatement_return);


        CommonTree SEMICOLON1_tree=null;
        CommonTree EOF2_tree=null;
        RewriteRuleTokenStream stream_SEMICOLON = new RewriteRuleTokenStream(adaptor,"token SEMICOLON");
        RewriteRuleTokenStream stream_EOF = new RewriteRuleTokenStream(adaptor,"token EOF");
        RewriteRuleSubtreeStream stream_selectStatement = new RewriteRuleSubtreeStream(adaptor,"rule selectStatement");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 1) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:378:5: (s= selectStatement ( SEMICOLON )* EOF -> selectStatement )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:378:7: s= selectStatement ( SEMICOLON )* EOF
            {
            	PushFollow(FOLLOW_selectStatement_in_statement3277);
            	s = selectStatement();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_selectStatement.Add(s.Tree);
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:378:25: ( SEMICOLON )*
            	do 
            	{
            	    int alt1 = 2;
            	    int LA1_0 = input.LA(1);

            	    if ( (LA1_0 == SEMICOLON) )
            	    {
            	        alt1 = 1;
            	    }


            	    switch (alt1) 
            		{
            			case 1 :
            			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:378:26: SEMICOLON
            			    {
            			    	SEMICOLON1=(IToken)Match(input,SEMICOLON,FOLLOW_SEMICOLON_in_statement3280); if (state.failed) return retval; 
            			    	if ( (state.backtracking==0) ) stream_SEMICOLON.Add(SEMICOLON1);


            			    }
            			    break;

            			default:
            			    goto loop1;
            	    }
            	} while (true);

            	loop1:
            		;	// Stops C# compiler whining that label 'loop1' has no statements

            	EOF2=(IToken)Match(input,EOF,FOLLOW_EOF_in_statement3284); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_EOF.Add(EOF2);



            	// AST REWRITE
            	// elements:          selectStatement
            	// token labels:      
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 379:5: -> selectStatement
            	{
            	    adaptor.AddChild(root_0, stream_selectStatement.NextTree());

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
            if ( (state.backtracking==0) )
            {

                      retval.result =  ((s != null) ? s.result : default(SqlQuery));
                  
            }
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 1, statement_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "statement"

    public class selectStatement_return : ParserRuleReturnScope
    {
        public SqlQuery result;
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "selectStatement"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:382:1: selectStatement returns [SqlQuery result] : q= queryExpression ( computeClause )? ( forClause )? ( optionClause )? ;
    public SqlParser.selectStatement_return selectStatement() // throws RecognitionException [1]
    {   
        SqlParser.selectStatement_return retval = new SqlParser.selectStatement_return();
        retval.Start = input.LT(1);
        int selectStatement_StartIndex = input.Index();
        CommonTree root_0 = null;

        SqlParser.queryExpression_return q = default(SqlParser.queryExpression_return);

        SqlParser.computeClause_return computeClause3 = default(SqlParser.computeClause_return);

        SqlParser.forClause_return forClause4 = default(SqlParser.forClause_return);

        SqlParser.optionClause_return optionClause5 = default(SqlParser.optionClause_return);



        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 2) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:386:5: (q= queryExpression ( computeClause )? ( forClause )? ( optionClause )? )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:387:5: q= queryExpression ( computeClause )? ( forClause )? ( optionClause )?
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	PushFollow(FOLLOW_queryExpression_in_selectStatement3328);
            	q = queryExpression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, q.Tree);
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:388:5: ( computeClause )?
            	int alt2 = 2;
            	int LA2_0 = input.LA(1);

            	if ( (LA2_0 == COMPUTE) )
            	{
            	    alt2 = 1;
            	}
            	switch (alt2) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:388:6: computeClause
            	        {
            	        	PushFollow(FOLLOW_computeClause_in_selectStatement3335);
            	        	computeClause3 = computeClause();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, computeClause3.Tree);

            	        }
            	        break;

            	}

            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:389:5: ( forClause )?
            	int alt3 = 2;
            	int LA3_0 = input.LA(1);

            	if ( (LA3_0 == FOR) )
            	{
            	    alt3 = 1;
            	}
            	switch (alt3) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:389:6: forClause
            	        {
            	        	PushFollow(FOLLOW_forClause_in_selectStatement3344);
            	        	forClause4 = forClause();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, forClause4.Tree);

            	        }
            	        break;

            	}

            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:390:5: ( optionClause )?
            	int alt4 = 2;
            	int LA4_0 = input.LA(1);

            	if ( (LA4_0 == OPTION) )
            	{
            	    alt4 = 1;
            	}
            	switch (alt4) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:390:6: optionClause
            	        {
            	        	PushFollow(FOLLOW_optionClause_in_selectStatement3353);
            	        	optionClause5 = optionClause();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, optionClause5.Tree);

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
            if ( (state.backtracking==0) )
            {

                      retval.result =  ((q != null) ? q.result : default(SqlQuery));
                  
            }
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 2, selectStatement_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "selectStatement"

    public class queryExpression_return : ParserRuleReturnScope
    {
        public SqlQuery result;
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "queryExpression"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:393:1: queryExpression returns [SqlQuery result] : u= unionExceptQueryExpression ( orderByClause )? -> ^( QUERY unionExceptQueryExpression ( orderByClause )? ) ;
    public SqlParser.queryExpression_return queryExpression() // throws RecognitionException [1]
    {   
        QueryScope_stack.Push(new QueryScope_scope());

        SqlParser.queryExpression_return retval = new SqlParser.queryExpression_return();
        retval.Start = input.LT(1);
        int queryExpression_StartIndex = input.Index();
        CommonTree root_0 = null;

        SqlParser.unionExceptQueryExpression_return u = default(SqlParser.unionExceptQueryExpression_return);

        SqlParser.orderByClause_return orderByClause6 = default(SqlParser.orderByClause_return);


        RewriteRuleSubtreeStream stream_unionExceptQueryExpression = new RewriteRuleSubtreeStream(adaptor,"rule unionExceptQueryExpression");
        RewriteRuleSubtreeStream stream_orderByClause = new RewriteRuleSubtreeStream(adaptor,"rule orderByClause");

                ((QueryScope_scope)QueryScope_stack.Peek()).current =  new SqlQuery();
            
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 3) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:404:5: (u= unionExceptQueryExpression ( orderByClause )? -> ^( QUERY unionExceptQueryExpression ( orderByClause )? ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:404:7: u= unionExceptQueryExpression ( orderByClause )?
            {
            	PushFollow(FOLLOW_unionExceptQueryExpression_in_queryExpression3400);
            	u = unionExceptQueryExpression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_unionExceptQueryExpression.Add(u.Tree);
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:404:36: ( orderByClause )?
            	int alt5 = 2;
            	int LA5_0 = input.LA(1);

            	if ( (LA5_0 == ORDER) )
            	{
            	    alt5 = 1;
            	}
            	switch (alt5) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:404:37: orderByClause
            	        {
            	        	PushFollow(FOLLOW_orderByClause_in_queryExpression3403);
            	        	orderByClause6 = orderByClause();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_orderByClause.Add(orderByClause6.Tree);

            	        }
            	        break;

            	}

            	if ( (state.backtracking==0) )
            	{

            	          if ( ((orderByClause6 != null) ? input.ToString((IToken)(orderByClause6.Start),(IToken)(orderByClause6.Stop)) : null) != null ) {
            	              ((QueryScope_scope)QueryScope_stack.Peek()).current.setOrderBy(((orderByClause6 != null) ? ((CommonTree)orderByClause6.Tree) : null));
            	          }
            	      
            	}


            	// AST REWRITE
            	// elements:          unionExceptQueryExpression, orderByClause
            	// token labels:      
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 410:5: -> ^( QUERY unionExceptQueryExpression ( orderByClause )? )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:410:8: ^( QUERY unionExceptQueryExpression ( orderByClause )? )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(QUERY, "QUERY"), root_1);

            	    adaptor.AddChild(root_1, stream_unionExceptQueryExpression.NextTree());
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:410:43: ( orderByClause )?
            	    if ( stream_orderByClause.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_orderByClause.NextTree());

            	    }
            	    stream_orderByClause.Reset();

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
            if ( (state.backtracking==0) )
            {

                      ((QueryScope_scope)QueryScope_stack.Peek()).current.setStatement(((CommonTree)retval.Tree));
                      retval.result =  ((QueryScope_scope)QueryScope_stack.Peek()).current;
                      retval.result.wrap();
                      
                  
            }
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 3, queryExpression_StartIndex); 
            }
            QueryScope_stack.Pop();

        }
        return retval;
    }
    // $ANTLR end "queryExpression"

    public class unionExceptQueryExpression_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "unionExceptQueryExpression"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:413:1: unionExceptQueryExpression : intersectQueryExpression ( ( UNION | EXCEPT ) ( ALL )? intersectQueryExpression )* ;
    public SqlParser.unionExceptQueryExpression_return unionExceptQueryExpression() // throws RecognitionException [1]
    {   
        SqlParser.unionExceptQueryExpression_return retval = new SqlParser.unionExceptQueryExpression_return();
        retval.Start = input.LT(1);
        int unionExceptQueryExpression_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken set8 = null;
        IToken ALL9 = null;
        SqlParser.intersectQueryExpression_return intersectQueryExpression7 = default(SqlParser.intersectQueryExpression_return);

        SqlParser.intersectQueryExpression_return intersectQueryExpression10 = default(SqlParser.intersectQueryExpression_return);


        CommonTree set8_tree=null;
        CommonTree ALL9_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 4) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:414:5: ( intersectQueryExpression ( ( UNION | EXCEPT ) ( ALL )? intersectQueryExpression )* )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:414:7: intersectQueryExpression ( ( UNION | EXCEPT ) ( ALL )? intersectQueryExpression )*
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	PushFollow(FOLLOW_intersectQueryExpression_in_unionExceptQueryExpression3444);
            	intersectQueryExpression7 = intersectQueryExpression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, intersectQueryExpression7.Tree);
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:414:32: ( ( UNION | EXCEPT ) ( ALL )? intersectQueryExpression )*
            	do 
            	{
            	    int alt7 = 2;
            	    int LA7_0 = input.LA(1);

            	    if ( (LA7_0 == EXCEPT || LA7_0 == UNION) )
            	    {
            	        alt7 = 1;
            	    }


            	    switch (alt7) 
            		{
            			case 1 :
            			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:414:33: ( UNION | EXCEPT ) ( ALL )? intersectQueryExpression
            			    {
            			    	set8=(IToken)input.LT(1);
            			    	set8 = (IToken)input.LT(1);
            			    	if ( input.LA(1) == EXCEPT || input.LA(1) == UNION ) 
            			    	{
            			    	    input.Consume();
            			    	    if ( state.backtracking == 0 ) root_0 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(set8), root_0);
            			    	    state.errorRecovery = false;state.failed = false;
            			    	}
            			    	else 
            			    	{
            			    	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            			    	    MismatchedSetException mse = new MismatchedSetException(null,input);
            			    	    throw mse;
            			    	}

            			    	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:414:49: ( ALL )?
            			    	int alt6 = 2;
            			    	int LA6_0 = input.LA(1);

            			    	if ( (LA6_0 == ALL) )
            			    	{
            			    	    alt6 = 1;
            			    	}
            			    	switch (alt6) 
            			    	{
            			    	    case 1 :
            			    	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:414:50: ALL
            			    	        {
            			    	        	ALL9=(IToken)Match(input,ALL,FOLLOW_ALL_in_unionExceptQueryExpression3455); if (state.failed) return retval;
            			    	        	if ( state.backtracking == 0 )
            			    	        	{ALL9_tree = (CommonTree)adaptor.Create(ALL9);
            			    	        		adaptor.AddChild(root_0, ALL9_tree);
            			    	        	}

            			    	        }
            			    	        break;

            			    	}

            			    	PushFollow(FOLLOW_intersectQueryExpression_in_unionExceptQueryExpression3459);
            			    	intersectQueryExpression10 = intersectQueryExpression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, intersectQueryExpression10.Tree);

            			    }
            			    break;

            			default:
            			    goto loop7;
            	    }
            	} while (true);

            	loop7:
            		;	// Stops C# compiler whining that label 'loop7' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 4, unionExceptQueryExpression_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "unionExceptQueryExpression"

    public class intersectQueryExpression_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "intersectQueryExpression"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:417:1: intersectQueryExpression : subQueryExpression ( INTERSECT ( ALL )? subQueryExpression )* ;
    public SqlParser.intersectQueryExpression_return intersectQueryExpression() // throws RecognitionException [1]
    {   
        SqlParser.intersectQueryExpression_return retval = new SqlParser.intersectQueryExpression_return();
        retval.Start = input.LT(1);
        int intersectQueryExpression_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken INTERSECT12 = null;
        IToken ALL13 = null;
        SqlParser.subQueryExpression_return subQueryExpression11 = default(SqlParser.subQueryExpression_return);

        SqlParser.subQueryExpression_return subQueryExpression14 = default(SqlParser.subQueryExpression_return);


        CommonTree INTERSECT12_tree=null;
        CommonTree ALL13_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 5) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:418:5: ( subQueryExpression ( INTERSECT ( ALL )? subQueryExpression )* )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:418:7: subQueryExpression ( INTERSECT ( ALL )? subQueryExpression )*
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	PushFollow(FOLLOW_subQueryExpression_in_intersectQueryExpression3480);
            	subQueryExpression11 = subQueryExpression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, subQueryExpression11.Tree);
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:418:26: ( INTERSECT ( ALL )? subQueryExpression )*
            	do 
            	{
            	    int alt9 = 2;
            	    alt9 = dfa9.Predict(input);
            	    switch (alt9) 
            		{
            			case 1 :
            			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:418:27: INTERSECT ( ALL )? subQueryExpression
            			    {
            			    	INTERSECT12=(IToken)Match(input,INTERSECT,FOLLOW_INTERSECT_in_intersectQueryExpression3483); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{INTERSECT12_tree = (CommonTree)adaptor.Create(INTERSECT12);
            			    		root_0 = (CommonTree)adaptor.BecomeRoot(INTERSECT12_tree, root_0);
            			    	}
            			    	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:418:38: ( ALL )?
            			    	int alt8 = 2;
            			    	int LA8_0 = input.LA(1);

            			    	if ( (LA8_0 == ALL) )
            			    	{
            			    	    alt8 = 1;
            			    	}
            			    	switch (alt8) 
            			    	{
            			    	    case 1 :
            			    	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:418:39: ALL
            			    	        {
            			    	        	ALL13=(IToken)Match(input,ALL,FOLLOW_ALL_in_intersectQueryExpression3487); if (state.failed) return retval;
            			    	        	if ( state.backtracking == 0 )
            			    	        	{ALL13_tree = (CommonTree)adaptor.Create(ALL13);
            			    	        		adaptor.AddChild(root_0, ALL13_tree);
            			    	        	}

            			    	        }
            			    	        break;

            			    	}

            			    	PushFollow(FOLLOW_subQueryExpression_in_intersectQueryExpression3491);
            			    	subQueryExpression14 = subQueryExpression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, subQueryExpression14.Tree);

            			    }
            			    break;

            			default:
            			    goto loop9;
            	    }
            	} while (true);

            	loop9:
            		;	// Stops C# compiler whining that label 'loop9' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 5, intersectQueryExpression_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "intersectQueryExpression"

    public class subQueryExpression_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "subQueryExpression"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:421:1: subQueryExpression : ( querySpecification | LPAREN queryExpression RPAREN -> queryExpression );
    public SqlParser.subQueryExpression_return subQueryExpression() // throws RecognitionException [1]
    {   
        SqlParser.subQueryExpression_return retval = new SqlParser.subQueryExpression_return();
        retval.Start = input.LT(1);
        int subQueryExpression_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken LPAREN16 = null;
        IToken RPAREN18 = null;
        SqlParser.querySpecification_return querySpecification15 = default(SqlParser.querySpecification_return);

        SqlParser.queryExpression_return queryExpression17 = default(SqlParser.queryExpression_return);


        CommonTree LPAREN16_tree=null;
        CommonTree RPAREN18_tree=null;
        RewriteRuleTokenStream stream_RPAREN = new RewriteRuleTokenStream(adaptor,"token RPAREN");
        RewriteRuleTokenStream stream_LPAREN = new RewriteRuleTokenStream(adaptor,"token LPAREN");
        RewriteRuleSubtreeStream stream_queryExpression = new RewriteRuleSubtreeStream(adaptor,"rule queryExpression");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 6) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:422:5: ( querySpecification | LPAREN queryExpression RPAREN -> queryExpression )
            int alt10 = 2;
            int LA10_0 = input.LA(1);

            if ( (LA10_0 == SELECT) )
            {
                alt10 = 1;
            }
            else if ( (LA10_0 == LPAREN) )
            {
                alt10 = 2;
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                NoViableAltException nvae_d10s0 =
                    new NoViableAltException("", 10, 0, input);

                throw nvae_d10s0;
            }
            switch (alt10) 
            {
                case 1 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:423:7: querySpecification
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_querySpecification_in_subQueryExpression3516);
                    	querySpecification15 = querySpecification();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, querySpecification15.Tree);
                    	if ( (state.backtracking==0) )
                    	{

                    	          if ( ((querySpecification15 != null) ? querySpecification15.result : default(SqlQuery)) != null )
                    	              ((QueryScope_scope)QueryScope_stack.Peek()).current.add(((querySpecification15 != null) ? querySpecification15.result : default(SqlQuery)));
                    	        
                    	}

                    }
                    break;
                case 2 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:429:7: LPAREN queryExpression RPAREN
                    {
                    	LPAREN16=(IToken)Match(input,LPAREN,FOLLOW_LPAREN_in_subQueryExpression3533); if (state.failed) return retval; 
                    	if ( (state.backtracking==0) ) stream_LPAREN.Add(LPAREN16);

                    	PushFollow(FOLLOW_queryExpression_in_subQueryExpression3535);
                    	queryExpression17 = queryExpression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( (state.backtracking==0) ) stream_queryExpression.Add(queryExpression17.Tree);
                    	RPAREN18=(IToken)Match(input,RPAREN,FOLLOW_RPAREN_in_subQueryExpression3537); if (state.failed) return retval; 
                    	if ( (state.backtracking==0) ) stream_RPAREN.Add(RPAREN18);

                    	if ( (state.backtracking==0) )
                    	{

                    	          if ( ((queryExpression17 != null) ? queryExpression17.result : default(SqlQuery)) != null )
                    	              ((QueryScope_scope)QueryScope_stack.Peek()).current.add(((queryExpression17 != null) ? queryExpression17.result : default(SqlQuery)));
                    	      
                    	}


                    	// AST REWRITE
                    	// elements:          queryExpression
                    	// token labels:      
                    	// rule labels:       retval
                    	// token list labels: 
                    	// rule list labels:  
                    	// wildcard labels: 
                    	if ( (state.backtracking==0) ) {
                    	retval.Tree = root_0;
                    	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	root_0 = (CommonTree)adaptor.GetNilNode();
                    	// 434:5: -> queryExpression
                    	{
                    	    adaptor.AddChild(root_0, stream_queryExpression.NextTree());

                    	}

                    	retval.Tree = root_0;retval.Tree = root_0;}
                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 6, subQueryExpression_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "subQueryExpression"

    public class querySpecification_return : ParserRuleReturnScope
    {
        public SqlQuery result;
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "querySpecification"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:437:1: querySpecification returns [SqlQuery result] : selectClause ( ( fromClause ) ( whereClause )? ( groupByClause ( havingClause )? )? )? -> ^( QUERYSPEC selectClause ( fromClause )? ( whereClause )? ( groupByClause )? ( havingClause )? ) ;
    public SqlParser.querySpecification_return querySpecification() // throws RecognitionException [1]
    {   
        QueryScope_stack.Push(new QueryScope_scope());

        SqlParser.querySpecification_return retval = new SqlParser.querySpecification_return();
        retval.Start = input.LT(1);
        int querySpecification_StartIndex = input.Index();
        CommonTree root_0 = null;

        SqlParser.selectClause_return selectClause19 = default(SqlParser.selectClause_return);

        SqlParser.fromClause_return fromClause20 = default(SqlParser.fromClause_return);

        SqlParser.whereClause_return whereClause21 = default(SqlParser.whereClause_return);

        SqlParser.groupByClause_return groupByClause22 = default(SqlParser.groupByClause_return);

        SqlParser.havingClause_return havingClause23 = default(SqlParser.havingClause_return);


        RewriteRuleSubtreeStream stream_whereClause = new RewriteRuleSubtreeStream(adaptor,"rule whereClause");
        RewriteRuleSubtreeStream stream_groupByClause = new RewriteRuleSubtreeStream(adaptor,"rule groupByClause");
        RewriteRuleSubtreeStream stream_havingClause = new RewriteRuleSubtreeStream(adaptor,"rule havingClause");
        RewriteRuleSubtreeStream stream_selectClause = new RewriteRuleSubtreeStream(adaptor,"rule selectClause");
        RewriteRuleSubtreeStream stream_fromClause = new RewriteRuleSubtreeStream(adaptor,"rule fromClause");

                ((QueryScope_scope)QueryScope_stack.Peek()).current =  new SqlQuery();
            
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 7) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:447:5: ( selectClause ( ( fromClause ) ( whereClause )? ( groupByClause ( havingClause )? )? )? -> ^( QUERYSPEC selectClause ( fromClause )? ( whereClause )? ( groupByClause )? ( havingClause )? ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:449:5: selectClause ( ( fromClause ) ( whereClause )? ( groupByClause ( havingClause )? )? )?
            {
            	PushFollow(FOLLOW_selectClause_in_querySpecification3604);
            	selectClause19 = selectClause();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_selectClause.Add(selectClause19.Tree);
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:451:5: ( ( fromClause ) ( whereClause )? ( groupByClause ( havingClause )? )? )?
            	int alt14 = 2;
            	alt14 = dfa14.Predict(input);
            	switch (alt14) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:451:6: ( fromClause ) ( whereClause )? ( groupByClause ( havingClause )? )?
            	        {
            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:451:6: ( fromClause )
            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:451:7: fromClause
            	        	{
            	        		PushFollow(FOLLOW_fromClause_in_querySpecification3613);
            	        		fromClause20 = fromClause();
            	        		state.followingStackPointer--;
            	        		if (state.failed) return retval;
            	        		if ( (state.backtracking==0) ) stream_fromClause.Add(fromClause20.Tree);

            	        	}

            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:452:5: ( whereClause )?
            	        	int alt11 = 2;
            	        	alt11 = dfa11.Predict(input);
            	        	switch (alt11) 
            	        	{
            	        	    case 1 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:452:6: whereClause
            	        	        {
            	        	        	PushFollow(FOLLOW_whereClause_in_querySpecification3621);
            	        	        	whereClause21 = whereClause();
            	        	        	state.followingStackPointer--;
            	        	        	if (state.failed) return retval;
            	        	        	if ( (state.backtracking==0) ) stream_whereClause.Add(whereClause21.Tree);

            	        	        }
            	        	        break;

            	        	}

            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:453:5: ( groupByClause ( havingClause )? )?
            	        	int alt13 = 2;
            	        	alt13 = dfa13.Predict(input);
            	        	switch (alt13) 
            	        	{
            	        	    case 1 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:453:6: groupByClause ( havingClause )?
            	        	        {
            	        	        	PushFollow(FOLLOW_groupByClause_in_querySpecification3630);
            	        	        	groupByClause22 = groupByClause();
            	        	        	state.followingStackPointer--;
            	        	        	if (state.failed) return retval;
            	        	        	if ( (state.backtracking==0) ) stream_groupByClause.Add(groupByClause22.Tree);
            	        	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:453:20: ( havingClause )?
            	        	        	int alt12 = 2;
            	        	        	alt12 = dfa12.Predict(input);
            	        	        	switch (alt12) 
            	        	        	{
            	        	        	    case 1 :
            	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:453:21: havingClause
            	        	        	        {
            	        	        	        	PushFollow(FOLLOW_havingClause_in_querySpecification3633);
            	        	        	        	havingClause23 = havingClause();
            	        	        	        	state.followingStackPointer--;
            	        	        	        	if (state.failed) return retval;
            	        	        	        	if ( (state.backtracking==0) ) stream_havingClause.Add(havingClause23.Tree);

            	        	        	        }
            	        	        	        break;

            	        	        	}


            	        	        }
            	        	        break;

            	        	}


            	        }
            	        break;

            	}

            	if ( (state.backtracking==0) )
            	{

            	          ((QueryScope_scope)QueryScope_stack.Peek()).current.setSelect(((selectClause19 != null) ? ((CommonTree)selectClause19.Tree) : null));
            	          if ( ((fromClause20 != null) ? input.ToString((IToken)(fromClause20.Start),(IToken)(fromClause20.Stop)) : null) != null ) {
            	              ((QueryScope_scope)QueryScope_stack.Peek()).current.setFrom(((fromClause20 != null) ? ((CommonTree)fromClause20.Tree) : null));
            	          }
            	          if ( ((whereClause21 != null) ? input.ToString((IToken)(whereClause21.Start),(IToken)(whereClause21.Stop)) : null) != null ) {
            	              ((QueryScope_scope)QueryScope_stack.Peek()).current.setWhere(((whereClause21 != null) ? ((CommonTree)whereClause21.Tree) : null));
            	          }
            	          if ( ((groupByClause22 != null) ? input.ToString((IToken)(groupByClause22.Start),(IToken)(groupByClause22.Stop)) : null) != null ) {
            	              ((QueryScope_scope)QueryScope_stack.Peek()).current.setGroupBy(((groupByClause22 != null) ? ((CommonTree)groupByClause22.Tree) : null));
            	          }
            	          if ( ((havingClause23 != null) ? input.ToString((IToken)(havingClause23.Start),(IToken)(havingClause23.Stop)) : null) != null ) {
            	              ((QueryScope_scope)QueryScope_stack.Peek()).current.setHaving(((havingClause23 != null) ? ((CommonTree)havingClause23.Tree) : null));
            	          }
            	      
            	}


            	// AST REWRITE
            	// elements:          havingClause, fromClause, selectClause, groupByClause, whereClause
            	// token labels:      
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 469:5: -> ^( QUERYSPEC selectClause ( fromClause )? ( whereClause )? ( groupByClause )? ( havingClause )? )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:469:8: ^( QUERYSPEC selectClause ( fromClause )? ( whereClause )? ( groupByClause )? ( havingClause )? )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(QUERYSPEC, "QUERYSPEC"), root_1);

            	    adaptor.AddChild(root_1, stream_selectClause.NextTree());
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:469:33: ( fromClause )?
            	    if ( stream_fromClause.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_fromClause.NextTree());

            	    }
            	    stream_fromClause.Reset();
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:469:45: ( whereClause )?
            	    if ( stream_whereClause.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_whereClause.NextTree());

            	    }
            	    stream_whereClause.Reset();
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:469:58: ( groupByClause )?
            	    if ( stream_groupByClause.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_groupByClause.NextTree());

            	    }
            	    stream_groupByClause.Reset();
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:469:73: ( havingClause )?
            	    if ( stream_havingClause.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_havingClause.NextTree());

            	    }
            	    stream_havingClause.Reset();

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
            if ( (state.backtracking==0) )
            {

                      // add this to current query?
                      ((QueryScope_scope)QueryScope_stack.Peek()).current.setStatement(((CommonTree)retval.Tree));
                      retval.result =  ((QueryScope_scope)QueryScope_stack.Peek()).current;
                  
            }
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 7, querySpecification_StartIndex); 
            }
            QueryScope_stack.Pop();

        }
        return retval;
    }
    // $ANTLR end "querySpecification"

    public class selectClause_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "selectClause"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:472:1: selectClause : SELECT (d= ALL | d= DISTINCT )? ( TOP k= expression ( PERCENT )? ( WITH TIES )? )? selectItem ( COMMA selectItem )* ( INTO dbObject )? -> ^( SELECT ( $d)? ( ^( TOP $k ( PERCENT )? ( TIES )? ) )? ( selectItem )+ ) ;
    public SqlParser.selectClause_return selectClause() // throws RecognitionException [1]
    {   
        SqlParser.selectClause_return retval = new SqlParser.selectClause_return();
        retval.Start = input.LT(1);
        int selectClause_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken d = null;
        IToken SELECT24 = null;
        IToken TOP25 = null;
        IToken PERCENT26 = null;
        IToken WITH27 = null;
        IToken TIES28 = null;
        IToken COMMA30 = null;
        IToken INTO32 = null;
        SqlParser.expression_return k = default(SqlParser.expression_return);

        SqlParser.selectItem_return selectItem29 = default(SqlParser.selectItem_return);

        SqlParser.selectItem_return selectItem31 = default(SqlParser.selectItem_return);

        SqlParser.dbObject_return dbObject33 = default(SqlParser.dbObject_return);


        CommonTree d_tree=null;
        CommonTree SELECT24_tree=null;
        CommonTree TOP25_tree=null;
        CommonTree PERCENT26_tree=null;
        CommonTree WITH27_tree=null;
        CommonTree TIES28_tree=null;
        CommonTree COMMA30_tree=null;
        CommonTree INTO32_tree=null;
        RewriteRuleTokenStream stream_PERCENT = new RewriteRuleTokenStream(adaptor,"token PERCENT");
        RewriteRuleTokenStream stream_TOP = new RewriteRuleTokenStream(adaptor,"token TOP");
        RewriteRuleTokenStream stream_COMMA = new RewriteRuleTokenStream(adaptor,"token COMMA");
        RewriteRuleTokenStream stream_SELECT = new RewriteRuleTokenStream(adaptor,"token SELECT");
        RewriteRuleTokenStream stream_DISTINCT = new RewriteRuleTokenStream(adaptor,"token DISTINCT");
        RewriteRuleTokenStream stream_TIES = new RewriteRuleTokenStream(adaptor,"token TIES");
        RewriteRuleTokenStream stream_INTO = new RewriteRuleTokenStream(adaptor,"token INTO");
        RewriteRuleTokenStream stream_ALL = new RewriteRuleTokenStream(adaptor,"token ALL");
        RewriteRuleTokenStream stream_WITH = new RewriteRuleTokenStream(adaptor,"token WITH");
        RewriteRuleSubtreeStream stream_expression = new RewriteRuleSubtreeStream(adaptor,"rule expression");
        RewriteRuleSubtreeStream stream_selectItem = new RewriteRuleSubtreeStream(adaptor,"rule selectItem");
        RewriteRuleSubtreeStream stream_dbObject = new RewriteRuleSubtreeStream(adaptor,"rule dbObject");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 8) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:473:5: ( SELECT (d= ALL | d= DISTINCT )? ( TOP k= expression ( PERCENT )? ( WITH TIES )? )? selectItem ( COMMA selectItem )* ( INTO dbObject )? -> ^( SELECT ( $d)? ( ^( TOP $k ( PERCENT )? ( TIES )? ) )? ( selectItem )+ ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:473:7: SELECT (d= ALL | d= DISTINCT )? ( TOP k= expression ( PERCENT )? ( WITH TIES )? )? selectItem ( COMMA selectItem )* ( INTO dbObject )?
            {
            	SELECT24=(IToken)Match(input,SELECT,FOLLOW_SELECT_in_selectClause3688); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_SELECT.Add(SELECT24);

            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:473:14: (d= ALL | d= DISTINCT )?
            	int alt15 = 3;
            	alt15 = dfa15.Predict(input);
            	switch (alt15) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:473:15: d= ALL
            	        {
            	        	d=(IToken)Match(input,ALL,FOLLOW_ALL_in_selectClause3693); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_ALL.Add(d);


            	        }
            	        break;
            	    case 2 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:473:23: d= DISTINCT
            	        {
            	        	d=(IToken)Match(input,DISTINCT,FOLLOW_DISTINCT_in_selectClause3699); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_DISTINCT.Add(d);


            	        }
            	        break;

            	}

            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:473:36: ( TOP k= expression ( PERCENT )? ( WITH TIES )? )?
            	int alt18 = 2;
            	alt18 = dfa18.Predict(input);
            	switch (alt18) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:473:37: TOP k= expression ( PERCENT )? ( WITH TIES )?
            	        {
            	        	TOP25=(IToken)Match(input,TOP,FOLLOW_TOP_in_selectClause3704); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_TOP.Add(TOP25);

            	        	PushFollow(FOLLOW_expression_in_selectClause3708);
            	        	k = expression();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_expression.Add(k.Tree);
            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:473:54: ( PERCENT )?
            	        	int alt16 = 2;
            	        	alt16 = dfa16.Predict(input);
            	        	switch (alt16) 
            	        	{
            	        	    case 1 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:473:55: PERCENT
            	        	        {
            	        	        	PERCENT26=(IToken)Match(input,PERCENT,FOLLOW_PERCENT_in_selectClause3711); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_PERCENT.Add(PERCENT26);


            	        	        }
            	        	        break;

            	        	}

            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:473:65: ( WITH TIES )?
            	        	int alt17 = 2;
            	        	alt17 = dfa17.Predict(input);
            	        	switch (alt17) 
            	        	{
            	        	    case 1 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:473:66: WITH TIES
            	        	        {
            	        	        	WITH27=(IToken)Match(input,WITH,FOLLOW_WITH_in_selectClause3716); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_WITH.Add(WITH27);

            	        	        	TIES28=(IToken)Match(input,TIES,FOLLOW_TIES_in_selectClause3718); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_TIES.Add(TIES28);


            	        	        }
            	        	        break;

            	        	}


            	        }
            	        break;

            	}

            	PushFollow(FOLLOW_selectItem_in_selectClause3725);
            	selectItem29 = selectItem();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_selectItem.Add(selectItem29.Tree);
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:473:92: ( COMMA selectItem )*
            	do 
            	{
            	    int alt19 = 2;
            	    alt19 = dfa19.Predict(input);
            	    switch (alt19) 
            		{
            			case 1 :
            			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:473:93: COMMA selectItem
            			    {
            			    	COMMA30=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_selectClause3728); if (state.failed) return retval; 
            			    	if ( (state.backtracking==0) ) stream_COMMA.Add(COMMA30);

            			    	PushFollow(FOLLOW_selectItem_in_selectClause3730);
            			    	selectItem31 = selectItem();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( (state.backtracking==0) ) stream_selectItem.Add(selectItem31.Tree);

            			    }
            			    break;

            			default:
            			    goto loop19;
            	    }
            	} while (true);

            	loop19:
            		;	// Stops C# compiler whining that label 'loop19' has no statements

            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:473:112: ( INTO dbObject )?
            	int alt20 = 2;
            	alt20 = dfa20.Predict(input);
            	switch (alt20) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:473:113: INTO dbObject
            	        {
            	        	INTO32=(IToken)Match(input,INTO,FOLLOW_INTO_in_selectClause3735); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_INTO.Add(INTO32);

            	        	PushFollow(FOLLOW_dbObject_in_selectClause3737);
            	        	dbObject33 = dbObject();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_dbObject.Add(dbObject33.Tree);

            	        }
            	        break;

            	}



            	// AST REWRITE
            	// elements:          PERCENT, k, SELECT, TOP, d, selectItem, TIES
            	// token labels:      d
            	// rule labels:       retval, k
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleTokenStream stream_d = new RewriteRuleTokenStream(adaptor, "token d", d);
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);
            	RewriteRuleSubtreeStream stream_k = new RewriteRuleSubtreeStream(adaptor, "rule k", k!=null ? k.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 474:5: -> ^( SELECT ( $d)? ( ^( TOP $k ( PERCENT )? ( TIES )? ) )? ( selectItem )+ )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:474:8: ^( SELECT ( $d)? ( ^( TOP $k ( PERCENT )? ( TIES )? ) )? ( selectItem )+ )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_SELECT.NextNode(), root_1);

            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:474:17: ( $d)?
            	    if ( stream_d.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_d.NextNode());

            	    }
            	    stream_d.Reset();
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:474:21: ( ^( TOP $k ( PERCENT )? ( TIES )? ) )?
            	    if ( stream_PERCENT.HasNext() || stream_k.HasNext() || stream_TOP.HasNext() || stream_TIES.HasNext() )
            	    {
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:474:21: ^( TOP $k ( PERCENT )? ( TIES )? )
            	        {
            	        CommonTree root_2 = (CommonTree)adaptor.GetNilNode();
            	        root_2 = (CommonTree)adaptor.BecomeRoot(stream_TOP.NextNode(), root_2);

            	        adaptor.AddChild(root_2, stream_k.NextTree());
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:474:30: ( PERCENT )?
            	        if ( stream_PERCENT.HasNext() )
            	        {
            	            adaptor.AddChild(root_2, stream_PERCENT.NextNode());

            	        }
            	        stream_PERCENT.Reset();
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:474:39: ( TIES )?
            	        if ( stream_TIES.HasNext() )
            	        {
            	            adaptor.AddChild(root_2, stream_TIES.NextNode());

            	        }
            	        stream_TIES.Reset();

            	        adaptor.AddChild(root_1, root_2);
            	        }

            	    }
            	    stream_PERCENT.Reset();
            	    stream_k.Reset();
            	    stream_TOP.Reset();
            	    stream_TIES.Reset();
            	    if ( !(stream_selectItem.HasNext()) ) {
            	        throw new RewriteEarlyExitException();
            	    }
            	    while ( stream_selectItem.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_selectItem.NextTree());

            	    }
            	    stream_selectItem.Reset();

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 8, selectClause_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "selectClause"

    public class whereClause_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "whereClause"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:477:1: whereClause : WHERE searchCondition -> ^( WHERE searchCondition ) ;
    public SqlParser.whereClause_return whereClause() // throws RecognitionException [1]
    {   
        SqlParser.whereClause_return retval = new SqlParser.whereClause_return();
        retval.Start = input.LT(1);
        int whereClause_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken WHERE34 = null;
        SqlParser.searchCondition_return searchCondition35 = default(SqlParser.searchCondition_return);


        CommonTree WHERE34_tree=null;
        RewriteRuleTokenStream stream_WHERE = new RewriteRuleTokenStream(adaptor,"token WHERE");
        RewriteRuleSubtreeStream stream_searchCondition = new RewriteRuleSubtreeStream(adaptor,"rule searchCondition");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 9) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:478:5: ( WHERE searchCondition -> ^( WHERE searchCondition ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:478:7: WHERE searchCondition
            {
            	WHERE34=(IToken)Match(input,WHERE,FOLLOW_WHERE_in_whereClause3788); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_WHERE.Add(WHERE34);

            	PushFollow(FOLLOW_searchCondition_in_whereClause3790);
            	searchCondition35 = searchCondition();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_searchCondition.Add(searchCondition35.Tree);


            	// AST REWRITE
            	// elements:          searchCondition, WHERE
            	// token labels:      
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 479:5: -> ^( WHERE searchCondition )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:479:8: ^( WHERE searchCondition )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_WHERE.NextNode(), root_1);

            	    adaptor.AddChild(root_1, stream_searchCondition.NextTree());

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 9, whereClause_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "whereClause"

    public class orderByItem_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "orderByItem"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:482:1: orderByItem : expression (o= ASC | o= DESC )? -> ^( ORDER expression ( $o)? ) ;
    public SqlParser.orderByItem_return orderByItem() // throws RecognitionException [1]
    {   
        SqlParser.orderByItem_return retval = new SqlParser.orderByItem_return();
        retval.Start = input.LT(1);
        int orderByItem_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken o = null;
        SqlParser.expression_return expression36 = default(SqlParser.expression_return);


        CommonTree o_tree=null;
        RewriteRuleTokenStream stream_ASC = new RewriteRuleTokenStream(adaptor,"token ASC");
        RewriteRuleTokenStream stream_DESC = new RewriteRuleTokenStream(adaptor,"token DESC");
        RewriteRuleSubtreeStream stream_expression = new RewriteRuleSubtreeStream(adaptor,"rule expression");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 10) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:483:5: ( expression (o= ASC | o= DESC )? -> ^( ORDER expression ( $o)? ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:483:7: expression (o= ASC | o= DESC )?
            {
            	PushFollow(FOLLOW_expression_in_orderByItem3819);
            	expression36 = expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_expression.Add(expression36.Tree);
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:483:18: (o= ASC | o= DESC )?
            	int alt21 = 3;
            	alt21 = dfa21.Predict(input);
            	switch (alt21) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:483:19: o= ASC
            	        {
            	        	o=(IToken)Match(input,ASC,FOLLOW_ASC_in_orderByItem3824); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_ASC.Add(o);


            	        }
            	        break;
            	    case 2 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:483:27: o= DESC
            	        {
            	        	o=(IToken)Match(input,DESC,FOLLOW_DESC_in_orderByItem3830); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_DESC.Add(o);


            	        }
            	        break;

            	}



            	// AST REWRITE
            	// elements:          expression, o
            	// token labels:      o
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleTokenStream stream_o = new RewriteRuleTokenStream(adaptor, "token o", o);
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 484:5: -> ^( ORDER expression ( $o)? )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:484:8: ^( ORDER expression ( $o)? )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(ORDER, "ORDER"), root_1);

            	    adaptor.AddChild(root_1, stream_expression.NextTree());
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:484:27: ( $o)?
            	    if ( stream_o.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_o.NextNode());

            	    }
            	    stream_o.Reset();

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 10, orderByItem_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "orderByItem"

    public class orderByClause_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "orderByClause"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:487:1: orderByClause : ORDER BY orderByItem ( COMMA orderByItem )* -> ^( ORDERBY ( orderByItem )+ ) ;
    public SqlParser.orderByClause_return orderByClause() // throws RecognitionException [1]
    {   
        SqlParser.orderByClause_return retval = new SqlParser.orderByClause_return();
        retval.Start = input.LT(1);
        int orderByClause_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken ORDER37 = null;
        IToken BY38 = null;
        IToken COMMA40 = null;
        SqlParser.orderByItem_return orderByItem39 = default(SqlParser.orderByItem_return);

        SqlParser.orderByItem_return orderByItem41 = default(SqlParser.orderByItem_return);


        CommonTree ORDER37_tree=null;
        CommonTree BY38_tree=null;
        CommonTree COMMA40_tree=null;
        RewriteRuleTokenStream stream_BY = new RewriteRuleTokenStream(adaptor,"token BY");
        RewriteRuleTokenStream stream_ORDER = new RewriteRuleTokenStream(adaptor,"token ORDER");
        RewriteRuleTokenStream stream_COMMA = new RewriteRuleTokenStream(adaptor,"token COMMA");
        RewriteRuleSubtreeStream stream_orderByItem = new RewriteRuleSubtreeStream(adaptor,"rule orderByItem");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 11) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:488:5: ( ORDER BY orderByItem ( COMMA orderByItem )* -> ^( ORDERBY ( orderByItem )+ ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:488:7: ORDER BY orderByItem ( COMMA orderByItem )*
            {
            	ORDER37=(IToken)Match(input,ORDER,FOLLOW_ORDER_in_orderByClause3865); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_ORDER.Add(ORDER37);

            	BY38=(IToken)Match(input,BY,FOLLOW_BY_in_orderByClause3867); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_BY.Add(BY38);

            	PushFollow(FOLLOW_orderByItem_in_orderByClause3869);
            	orderByItem39 = orderByItem();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_orderByItem.Add(orderByItem39.Tree);
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:488:28: ( COMMA orderByItem )*
            	do 
            	{
            	    int alt22 = 2;
            	    int LA22_0 = input.LA(1);

            	    if ( (LA22_0 == COMMA) )
            	    {
            	        alt22 = 1;
            	    }


            	    switch (alt22) 
            		{
            			case 1 :
            			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:488:29: COMMA orderByItem
            			    {
            			    	COMMA40=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_orderByClause3872); if (state.failed) return retval; 
            			    	if ( (state.backtracking==0) ) stream_COMMA.Add(COMMA40);

            			    	PushFollow(FOLLOW_orderByItem_in_orderByClause3874);
            			    	orderByItem41 = orderByItem();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( (state.backtracking==0) ) stream_orderByItem.Add(orderByItem41.Tree);

            			    }
            			    break;

            			default:
            			    goto loop22;
            	    }
            	} while (true);

            	loop22:
            		;	// Stops C# compiler whining that label 'loop22' has no statements



            	// AST REWRITE
            	// elements:          orderByItem
            	// token labels:      
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 489:5: -> ^( ORDERBY ( orderByItem )+ )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:489:7: ^( ORDERBY ( orderByItem )+ )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(ORDERBY, "ORDERBY"), root_1);

            	    if ( !(stream_orderByItem.HasNext()) ) {
            	        throw new RewriteEarlyExitException();
            	    }
            	    while ( stream_orderByItem.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_orderByItem.NextTree());

            	    }
            	    stream_orderByItem.Reset();

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 11, orderByClause_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "orderByClause"

    public class groupByClause_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "groupByClause"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:492:1: groupByClause : GROUP BY ( ALL )? expression ( COMMA expression )* ( WITH ( CUBE | ROLLUP ) )? -> ^( GROUPBY ( ALL )? ( expression )+ ) ;
    public SqlParser.groupByClause_return groupByClause() // throws RecognitionException [1]
    {   
        SqlParser.groupByClause_return retval = new SqlParser.groupByClause_return();
        retval.Start = input.LT(1);
        int groupByClause_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken GROUP42 = null;
        IToken BY43 = null;
        IToken ALL44 = null;
        IToken COMMA46 = null;
        IToken WITH48 = null;
        IToken CUBE49 = null;
        IToken ROLLUP50 = null;
        SqlParser.expression_return expression45 = default(SqlParser.expression_return);

        SqlParser.expression_return expression47 = default(SqlParser.expression_return);


        CommonTree GROUP42_tree=null;
        CommonTree BY43_tree=null;
        CommonTree ALL44_tree=null;
        CommonTree COMMA46_tree=null;
        CommonTree WITH48_tree=null;
        CommonTree CUBE49_tree=null;
        CommonTree ROLLUP50_tree=null;
        RewriteRuleTokenStream stream_GROUP = new RewriteRuleTokenStream(adaptor,"token GROUP");
        RewriteRuleTokenStream stream_BY = new RewriteRuleTokenStream(adaptor,"token BY");
        RewriteRuleTokenStream stream_CUBE = new RewriteRuleTokenStream(adaptor,"token CUBE");
        RewriteRuleTokenStream stream_COMMA = new RewriteRuleTokenStream(adaptor,"token COMMA");
        RewriteRuleTokenStream stream_ROLLUP = new RewriteRuleTokenStream(adaptor,"token ROLLUP");
        RewriteRuleTokenStream stream_ALL = new RewriteRuleTokenStream(adaptor,"token ALL");
        RewriteRuleTokenStream stream_WITH = new RewriteRuleTokenStream(adaptor,"token WITH");
        RewriteRuleSubtreeStream stream_expression = new RewriteRuleSubtreeStream(adaptor,"rule expression");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 12) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:493:5: ( GROUP BY ( ALL )? expression ( COMMA expression )* ( WITH ( CUBE | ROLLUP ) )? -> ^( GROUPBY ( ALL )? ( expression )+ ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:493:7: GROUP BY ( ALL )? expression ( COMMA expression )* ( WITH ( CUBE | ROLLUP ) )?
            {
            	GROUP42=(IToken)Match(input,GROUP,FOLLOW_GROUP_in_groupByClause3906); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_GROUP.Add(GROUP42);

            	BY43=(IToken)Match(input,BY,FOLLOW_BY_in_groupByClause3908); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_BY.Add(BY43);

            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:493:16: ( ALL )?
            	int alt23 = 2;
            	alt23 = dfa23.Predict(input);
            	switch (alt23) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:493:17: ALL
            	        {
            	        	ALL44=(IToken)Match(input,ALL,FOLLOW_ALL_in_groupByClause3911); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_ALL.Add(ALL44);


            	        }
            	        break;

            	}

            	PushFollow(FOLLOW_expression_in_groupByClause3915);
            	expression45 = expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_expression.Add(expression45.Tree);
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:493:34: ( COMMA expression )*
            	do 
            	{
            	    int alt24 = 2;
            	    alt24 = dfa24.Predict(input);
            	    switch (alt24) 
            		{
            			case 1 :
            			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:493:35: COMMA expression
            			    {
            			    	COMMA46=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_groupByClause3918); if (state.failed) return retval; 
            			    	if ( (state.backtracking==0) ) stream_COMMA.Add(COMMA46);

            			    	PushFollow(FOLLOW_expression_in_groupByClause3920);
            			    	expression47 = expression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( (state.backtracking==0) ) stream_expression.Add(expression47.Tree);

            			    }
            			    break;

            			default:
            			    goto loop24;
            	    }
            	} while (true);

            	loop24:
            		;	// Stops C# compiler whining that label 'loop24' has no statements

            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:493:54: ( WITH ( CUBE | ROLLUP ) )?
            	int alt26 = 2;
            	alt26 = dfa26.Predict(input);
            	switch (alt26) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:493:55: WITH ( CUBE | ROLLUP )
            	        {
            	        	WITH48=(IToken)Match(input,WITH,FOLLOW_WITH_in_groupByClause3925); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_WITH.Add(WITH48);

            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:493:60: ( CUBE | ROLLUP )
            	        	int alt25 = 2;
            	        	int LA25_0 = input.LA(1);

            	        	if ( (LA25_0 == CUBE) )
            	        	{
            	        	    alt25 = 1;
            	        	}
            	        	else if ( (LA25_0 == ROLLUP) )
            	        	{
            	        	    alt25 = 2;
            	        	}
            	        	else 
            	        	{
            	        	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	        	    NoViableAltException nvae_d25s0 =
            	        	        new NoViableAltException("", 25, 0, input);

            	        	    throw nvae_d25s0;
            	        	}
            	        	switch (alt25) 
            	        	{
            	        	    case 1 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:493:61: CUBE
            	        	        {
            	        	        	CUBE49=(IToken)Match(input,CUBE,FOLLOW_CUBE_in_groupByClause3928); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_CUBE.Add(CUBE49);


            	        	        }
            	        	        break;
            	        	    case 2 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:493:68: ROLLUP
            	        	        {
            	        	        	ROLLUP50=(IToken)Match(input,ROLLUP,FOLLOW_ROLLUP_in_groupByClause3932); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_ROLLUP.Add(ROLLUP50);


            	        	        }
            	        	        break;

            	        	}


            	        }
            	        break;

            	}



            	// AST REWRITE
            	// elements:          ALL, expression
            	// token labels:      
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 494:5: -> ^( GROUPBY ( ALL )? ( expression )+ )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:494:8: ^( GROUPBY ( ALL )? ( expression )+ )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(GROUPBY, "GROUPBY"), root_1);

            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:494:18: ( ALL )?
            	    if ( stream_ALL.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_ALL.NextNode());

            	    }
            	    stream_ALL.Reset();
            	    if ( !(stream_expression.HasNext()) ) {
            	        throw new RewriteEarlyExitException();
            	    }
            	    while ( stream_expression.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_expression.NextTree());

            	    }
            	    stream_expression.Reset();

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 12, groupByClause_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "groupByClause"

    public class havingClause_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "havingClause"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:497:1: havingClause : HAVING searchCondition -> ^( HAVING searchCondition ) ;
    public SqlParser.havingClause_return havingClause() // throws RecognitionException [1]
    {   
        SqlParser.havingClause_return retval = new SqlParser.havingClause_return();
        retval.Start = input.LT(1);
        int havingClause_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken HAVING51 = null;
        SqlParser.searchCondition_return searchCondition52 = default(SqlParser.searchCondition_return);


        CommonTree HAVING51_tree=null;
        RewriteRuleTokenStream stream_HAVING = new RewriteRuleTokenStream(adaptor,"token HAVING");
        RewriteRuleSubtreeStream stream_searchCondition = new RewriteRuleSubtreeStream(adaptor,"rule searchCondition");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 13) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:498:5: ( HAVING searchCondition -> ^( HAVING searchCondition ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:498:7: HAVING searchCondition
            {
            	HAVING51=(IToken)Match(input,HAVING,FOLLOW_HAVING_in_havingClause3970); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_HAVING.Add(HAVING51);

            	PushFollow(FOLLOW_searchCondition_in_havingClause3972);
            	searchCondition52 = searchCondition();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_searchCondition.Add(searchCondition52.Tree);


            	// AST REWRITE
            	// elements:          HAVING, searchCondition
            	// token labels:      
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 499:5: -> ^( HAVING searchCondition )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:499:8: ^( HAVING searchCondition )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_HAVING.NextNode(), root_1);

            	    adaptor.AddChild(root_1, stream_searchCondition.NextTree());

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 13, havingClause_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "havingClause"

    public class optionClause_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "optionClause"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:502:1: optionClause : OPTION LPAREN queryHint ( COMMA queryHint )* RPAREN -> ^( HINT ( queryHint )+ ) ;
    public SqlParser.optionClause_return optionClause() // throws RecognitionException [1]
    {   
        SqlParser.optionClause_return retval = new SqlParser.optionClause_return();
        retval.Start = input.LT(1);
        int optionClause_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken OPTION53 = null;
        IToken LPAREN54 = null;
        IToken COMMA56 = null;
        IToken RPAREN58 = null;
        SqlParser.queryHint_return queryHint55 = default(SqlParser.queryHint_return);

        SqlParser.queryHint_return queryHint57 = default(SqlParser.queryHint_return);


        CommonTree OPTION53_tree=null;
        CommonTree LPAREN54_tree=null;
        CommonTree COMMA56_tree=null;
        CommonTree RPAREN58_tree=null;
        RewriteRuleTokenStream stream_RPAREN = new RewriteRuleTokenStream(adaptor,"token RPAREN");
        RewriteRuleTokenStream stream_OPTION = new RewriteRuleTokenStream(adaptor,"token OPTION");
        RewriteRuleTokenStream stream_COMMA = new RewriteRuleTokenStream(adaptor,"token COMMA");
        RewriteRuleTokenStream stream_LPAREN = new RewriteRuleTokenStream(adaptor,"token LPAREN");
        RewriteRuleSubtreeStream stream_queryHint = new RewriteRuleSubtreeStream(adaptor,"rule queryHint");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 14) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:503:5: ( OPTION LPAREN queryHint ( COMMA queryHint )* RPAREN -> ^( HINT ( queryHint )+ ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:503:7: OPTION LPAREN queryHint ( COMMA queryHint )* RPAREN
            {
            	OPTION53=(IToken)Match(input,OPTION,FOLLOW_OPTION_in_optionClause4001); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_OPTION.Add(OPTION53);

            	LPAREN54=(IToken)Match(input,LPAREN,FOLLOW_LPAREN_in_optionClause4003); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_LPAREN.Add(LPAREN54);

            	PushFollow(FOLLOW_queryHint_in_optionClause4005);
            	queryHint55 = queryHint();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_queryHint.Add(queryHint55.Tree);
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:503:31: ( COMMA queryHint )*
            	do 
            	{
            	    int alt27 = 2;
            	    int LA27_0 = input.LA(1);

            	    if ( (LA27_0 == COMMA) )
            	    {
            	        alt27 = 1;
            	    }


            	    switch (alt27) 
            		{
            			case 1 :
            			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:503:32: COMMA queryHint
            			    {
            			    	COMMA56=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_optionClause4008); if (state.failed) return retval; 
            			    	if ( (state.backtracking==0) ) stream_COMMA.Add(COMMA56);

            			    	PushFollow(FOLLOW_queryHint_in_optionClause4010);
            			    	queryHint57 = queryHint();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( (state.backtracking==0) ) stream_queryHint.Add(queryHint57.Tree);

            			    }
            			    break;

            			default:
            			    goto loop27;
            	    }
            	} while (true);

            	loop27:
            		;	// Stops C# compiler whining that label 'loop27' has no statements

            	RPAREN58=(IToken)Match(input,RPAREN,FOLLOW_RPAREN_in_optionClause4014); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_RPAREN.Add(RPAREN58);



            	// AST REWRITE
            	// elements:          queryHint
            	// token labels:      
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 504:5: -> ^( HINT ( queryHint )+ )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:504:8: ^( HINT ( queryHint )+ )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(HINT, "HINT"), root_1);

            	    if ( !(stream_queryHint.HasNext()) ) {
            	        throw new RewriteEarlyExitException();
            	    }
            	    while ( stream_queryHint.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_queryHint.NextTree());

            	    }
            	    stream_queryHint.Reset();

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 14, optionClause_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "optionClause"

    public class queryHint_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "queryHint"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:507:1: queryHint : ( ( HASH | ORDER ) GROUP | ( CONCAT | HASH | MERGE ) UNION | ( LOOP | MERGE | HASH ) JOIN | FAST Integer | FORCE ORDER | MAXDOP Integer | ROBUST PLAN | KEEP PLAN | KEEPFIXED PLAN | EXPAND VIEWS );
    public SqlParser.queryHint_return queryHint() // throws RecognitionException [1]
    {   
        SqlParser.queryHint_return retval = new SqlParser.queryHint_return();
        retval.Start = input.LT(1);
        int queryHint_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken set59 = null;
        IToken GROUP60 = null;
        IToken set61 = null;
        IToken UNION62 = null;
        IToken set63 = null;
        IToken JOIN64 = null;
        IToken FAST65 = null;
        IToken Integer66 = null;
        IToken FORCE67 = null;
        IToken ORDER68 = null;
        IToken MAXDOP69 = null;
        IToken Integer70 = null;
        IToken ROBUST71 = null;
        IToken PLAN72 = null;
        IToken KEEP73 = null;
        IToken PLAN74 = null;
        IToken KEEPFIXED75 = null;
        IToken PLAN76 = null;
        IToken EXPAND77 = null;
        IToken VIEWS78 = null;

        CommonTree set59_tree=null;
        CommonTree GROUP60_tree=null;
        CommonTree set61_tree=null;
        CommonTree UNION62_tree=null;
        CommonTree set63_tree=null;
        CommonTree JOIN64_tree=null;
        CommonTree FAST65_tree=null;
        CommonTree Integer66_tree=null;
        CommonTree FORCE67_tree=null;
        CommonTree ORDER68_tree=null;
        CommonTree MAXDOP69_tree=null;
        CommonTree Integer70_tree=null;
        CommonTree ROBUST71_tree=null;
        CommonTree PLAN72_tree=null;
        CommonTree KEEP73_tree=null;
        CommonTree PLAN74_tree=null;
        CommonTree KEEPFIXED75_tree=null;
        CommonTree PLAN76_tree=null;
        CommonTree EXPAND77_tree=null;
        CommonTree VIEWS78_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 15) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:508:5: ( ( HASH | ORDER ) GROUP | ( CONCAT | HASH | MERGE ) UNION | ( LOOP | MERGE | HASH ) JOIN | FAST Integer | FORCE ORDER | MAXDOP Integer | ROBUST PLAN | KEEP PLAN | KEEPFIXED PLAN | EXPAND VIEWS )
            int alt28 = 10;
            alt28 = dfa28.Predict(input);
            switch (alt28) 
            {
                case 1 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:509:7: ( HASH | ORDER ) GROUP
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	set59 = (IToken)input.LT(1);
                    	if ( input.LA(1) == HASH || input.LA(1) == ORDER ) 
                    	{
                    	    input.Consume();
                    	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (CommonTree)adaptor.Create(set59));
                    	    state.errorRecovery = false;state.failed = false;
                    	}
                    	else 
                    	{
                    	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    	    MismatchedSetException mse = new MismatchedSetException(null,input);
                    	    throw mse;
                    	}

                    	GROUP60=(IToken)Match(input,GROUP,FOLLOW_GROUP_in_queryHint4058); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{GROUP60_tree = (CommonTree)adaptor.Create(GROUP60);
                    		adaptor.AddChild(root_0, GROUP60_tree);
                    	}

                    }
                    break;
                case 2 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:510:7: ( CONCAT | HASH | MERGE ) UNION
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	set61 = (IToken)input.LT(1);
                    	if ( input.LA(1) == CONCAT || input.LA(1) == HASH || input.LA(1) == MERGE ) 
                    	{
                    	    input.Consume();
                    	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (CommonTree)adaptor.Create(set61));
                    	    state.errorRecovery = false;state.failed = false;
                    	}
                    	else 
                    	{
                    	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    	    MismatchedSetException mse = new MismatchedSetException(null,input);
                    	    throw mse;
                    	}

                    	UNION62=(IToken)Match(input,UNION,FOLLOW_UNION_in_queryHint4078); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{UNION62_tree = (CommonTree)adaptor.Create(UNION62);
                    		adaptor.AddChild(root_0, UNION62_tree);
                    	}

                    }
                    break;
                case 3 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:511:7: ( LOOP | MERGE | HASH ) JOIN
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	set63 = (IToken)input.LT(1);
                    	if ( input.LA(1) == HASH || input.LA(1) == LOOP || input.LA(1) == MERGE ) 
                    	{
                    	    input.Consume();
                    	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (CommonTree)adaptor.Create(set63));
                    	    state.errorRecovery = false;state.failed = false;
                    	}
                    	else 
                    	{
                    	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    	    MismatchedSetException mse = new MismatchedSetException(null,input);
                    	    throw mse;
                    	}

                    	JOIN64=(IToken)Match(input,JOIN,FOLLOW_JOIN_in_queryHint4098); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{JOIN64_tree = (CommonTree)adaptor.Create(JOIN64);
                    		adaptor.AddChild(root_0, JOIN64_tree);
                    	}

                    }
                    break;
                case 4 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:512:7: FAST Integer
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	FAST65=(IToken)Match(input,FAST,FOLLOW_FAST_in_queryHint4106); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{FAST65_tree = (CommonTree)adaptor.Create(FAST65);
                    		adaptor.AddChild(root_0, FAST65_tree);
                    	}
                    	Integer66=(IToken)Match(input,Integer,FOLLOW_Integer_in_queryHint4108); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{Integer66_tree = (CommonTree)adaptor.Create(Integer66);
                    		adaptor.AddChild(root_0, Integer66_tree);
                    	}

                    }
                    break;
                case 5 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:513:7: FORCE ORDER
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	FORCE67=(IToken)Match(input,FORCE,FOLLOW_FORCE_in_queryHint4116); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{FORCE67_tree = (CommonTree)adaptor.Create(FORCE67);
                    		adaptor.AddChild(root_0, FORCE67_tree);
                    	}
                    	ORDER68=(IToken)Match(input,ORDER,FOLLOW_ORDER_in_queryHint4118); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{ORDER68_tree = (CommonTree)adaptor.Create(ORDER68);
                    		adaptor.AddChild(root_0, ORDER68_tree);
                    	}

                    }
                    break;
                case 6 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:514:7: MAXDOP Integer
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	MAXDOP69=(IToken)Match(input,MAXDOP,FOLLOW_MAXDOP_in_queryHint4126); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{MAXDOP69_tree = (CommonTree)adaptor.Create(MAXDOP69);
                    		adaptor.AddChild(root_0, MAXDOP69_tree);
                    	}
                    	Integer70=(IToken)Match(input,Integer,FOLLOW_Integer_in_queryHint4128); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{Integer70_tree = (CommonTree)adaptor.Create(Integer70);
                    		adaptor.AddChild(root_0, Integer70_tree);
                    	}

                    }
                    break;
                case 7 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:515:7: ROBUST PLAN
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	ROBUST71=(IToken)Match(input,ROBUST,FOLLOW_ROBUST_in_queryHint4136); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{ROBUST71_tree = (CommonTree)adaptor.Create(ROBUST71);
                    		adaptor.AddChild(root_0, ROBUST71_tree);
                    	}
                    	PLAN72=(IToken)Match(input,PLAN,FOLLOW_PLAN_in_queryHint4138); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{PLAN72_tree = (CommonTree)adaptor.Create(PLAN72);
                    		adaptor.AddChild(root_0, PLAN72_tree);
                    	}

                    }
                    break;
                case 8 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:516:7: KEEP PLAN
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	KEEP73=(IToken)Match(input,KEEP,FOLLOW_KEEP_in_queryHint4146); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{KEEP73_tree = (CommonTree)adaptor.Create(KEEP73);
                    		adaptor.AddChild(root_0, KEEP73_tree);
                    	}
                    	PLAN74=(IToken)Match(input,PLAN,FOLLOW_PLAN_in_queryHint4148); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{PLAN74_tree = (CommonTree)adaptor.Create(PLAN74);
                    		adaptor.AddChild(root_0, PLAN74_tree);
                    	}

                    }
                    break;
                case 9 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:517:7: KEEPFIXED PLAN
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	KEEPFIXED75=(IToken)Match(input,KEEPFIXED,FOLLOW_KEEPFIXED_in_queryHint4156); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{KEEPFIXED75_tree = (CommonTree)adaptor.Create(KEEPFIXED75);
                    		adaptor.AddChild(root_0, KEEPFIXED75_tree);
                    	}
                    	PLAN76=(IToken)Match(input,PLAN,FOLLOW_PLAN_in_queryHint4158); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{PLAN76_tree = (CommonTree)adaptor.Create(PLAN76);
                    		adaptor.AddChild(root_0, PLAN76_tree);
                    	}

                    }
                    break;
                case 10 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:518:7: EXPAND VIEWS
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	EXPAND77=(IToken)Match(input,EXPAND,FOLLOW_EXPAND_in_queryHint4166); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{EXPAND77_tree = (CommonTree)adaptor.Create(EXPAND77);
                    		adaptor.AddChild(root_0, EXPAND77_tree);
                    	}
                    	VIEWS78=(IToken)Match(input,VIEWS,FOLLOW_VIEWS_in_queryHint4168); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{VIEWS78_tree = (CommonTree)adaptor.Create(VIEWS78);
                    		adaptor.AddChild(root_0, VIEWS78_tree);
                    	}

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 15, queryHint_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "queryHint"

    public class forClause_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "forClause"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:521:1: forClause : FOR ( BROWSE | XML ( RAW | AUTO | EXPLICIT ) ( COMMA XMLDATA )? ( COMMA ELEMENTS )? ( COMMA BINARY BASE64 ) ) ;
    public SqlParser.forClause_return forClause() // throws RecognitionException [1]
    {   
        SqlParser.forClause_return retval = new SqlParser.forClause_return();
        retval.Start = input.LT(1);
        int forClause_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken FOR79 = null;
        IToken BROWSE80 = null;
        IToken XML81 = null;
        IToken set82 = null;
        IToken COMMA83 = null;
        IToken XMLDATA84 = null;
        IToken COMMA85 = null;
        IToken ELEMENTS86 = null;
        IToken COMMA87 = null;
        IToken BINARY88 = null;
        IToken BASE6489 = null;

        CommonTree FOR79_tree=null;
        CommonTree BROWSE80_tree=null;
        CommonTree XML81_tree=null;
        CommonTree set82_tree=null;
        CommonTree COMMA83_tree=null;
        CommonTree XMLDATA84_tree=null;
        CommonTree COMMA85_tree=null;
        CommonTree ELEMENTS86_tree=null;
        CommonTree COMMA87_tree=null;
        CommonTree BINARY88_tree=null;
        CommonTree BASE6489_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 16) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:522:5: ( FOR ( BROWSE | XML ( RAW | AUTO | EXPLICIT ) ( COMMA XMLDATA )? ( COMMA ELEMENTS )? ( COMMA BINARY BASE64 ) ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:523:5: FOR ( BROWSE | XML ( RAW | AUTO | EXPLICIT ) ( COMMA XMLDATA )? ( COMMA ELEMENTS )? ( COMMA BINARY BASE64 ) )
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	FOR79=(IToken)Match(input,FOR,FOLLOW_FOR_in_forClause4189); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{FOR79_tree = (CommonTree)adaptor.Create(FOR79);
            		adaptor.AddChild(root_0, FOR79_tree);
            	}
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:523:9: ( BROWSE | XML ( RAW | AUTO | EXPLICIT ) ( COMMA XMLDATA )? ( COMMA ELEMENTS )? ( COMMA BINARY BASE64 ) )
            	int alt31 = 2;
            	int LA31_0 = input.LA(1);

            	if ( (LA31_0 == BROWSE) )
            	{
            	    alt31 = 1;
            	}
            	else if ( (LA31_0 == XML) )
            	{
            	    alt31 = 2;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d31s0 =
            	        new NoViableAltException("", 31, 0, input);

            	    throw nvae_d31s0;
            	}
            	switch (alt31) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:524:7: BROWSE
            	        {
            	        	BROWSE80=(IToken)Match(input,BROWSE,FOLLOW_BROWSE_in_forClause4199); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{BROWSE80_tree = (CommonTree)adaptor.Create(BROWSE80);
            	        		adaptor.AddChild(root_0, BROWSE80_tree);
            	        	}

            	        }
            	        break;
            	    case 2 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:525:7: XML ( RAW | AUTO | EXPLICIT ) ( COMMA XMLDATA )? ( COMMA ELEMENTS )? ( COMMA BINARY BASE64 )
            	        {
            	        	XML81=(IToken)Match(input,XML,FOLLOW_XML_in_forClause4207); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{XML81_tree = (CommonTree)adaptor.Create(XML81);
            	        		adaptor.AddChild(root_0, XML81_tree);
            	        	}
            	        	set82 = (IToken)input.LT(1);
            	        	if ( input.LA(1) == AUTO || input.LA(1) == EXPLICIT || input.LA(1) == RAW ) 
            	        	{
            	        	    input.Consume();
            	        	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (CommonTree)adaptor.Create(set82));
            	        	    state.errorRecovery = false;state.failed = false;
            	        	}
            	        	else 
            	        	{
            	        	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	        	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	        	    throw mse;
            	        	}

            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:525:35: ( COMMA XMLDATA )?
            	        	int alt29 = 2;
            	        	int LA29_0 = input.LA(1);

            	        	if ( (LA29_0 == COMMA) )
            	        	{
            	        	    int LA29_1 = input.LA(2);

            	        	    if ( (LA29_1 == XMLDATA) )
            	        	    {
            	        	        alt29 = 1;
            	        	    }
            	        	}
            	        	switch (alt29) 
            	        	{
            	        	    case 1 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:525:36: COMMA XMLDATA
            	        	        {
            	        	        	COMMA83=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_forClause4222); if (state.failed) return retval;
            	        	        	if ( state.backtracking == 0 )
            	        	        	{COMMA83_tree = (CommonTree)adaptor.Create(COMMA83);
            	        	        		adaptor.AddChild(root_0, COMMA83_tree);
            	        	        	}
            	        	        	XMLDATA84=(IToken)Match(input,XMLDATA,FOLLOW_XMLDATA_in_forClause4224); if (state.failed) return retval;
            	        	        	if ( state.backtracking == 0 )
            	        	        	{XMLDATA84_tree = (CommonTree)adaptor.Create(XMLDATA84);
            	        	        		adaptor.AddChild(root_0, XMLDATA84_tree);
            	        	        	}

            	        	        }
            	        	        break;

            	        	}

            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:525:52: ( COMMA ELEMENTS )?
            	        	int alt30 = 2;
            	        	int LA30_0 = input.LA(1);

            	        	if ( (LA30_0 == COMMA) )
            	        	{
            	        	    int LA30_1 = input.LA(2);

            	        	    if ( (LA30_1 == ELEMENTS) )
            	        	    {
            	        	        alt30 = 1;
            	        	    }
            	        	}
            	        	switch (alt30) 
            	        	{
            	        	    case 1 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:525:53: COMMA ELEMENTS
            	        	        {
            	        	        	COMMA85=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_forClause4229); if (state.failed) return retval;
            	        	        	if ( state.backtracking == 0 )
            	        	        	{COMMA85_tree = (CommonTree)adaptor.Create(COMMA85);
            	        	        		adaptor.AddChild(root_0, COMMA85_tree);
            	        	        	}
            	        	        	ELEMENTS86=(IToken)Match(input,ELEMENTS,FOLLOW_ELEMENTS_in_forClause4231); if (state.failed) return retval;
            	        	        	if ( state.backtracking == 0 )
            	        	        	{ELEMENTS86_tree = (CommonTree)adaptor.Create(ELEMENTS86);
            	        	        		adaptor.AddChild(root_0, ELEMENTS86_tree);
            	        	        	}

            	        	        }
            	        	        break;

            	        	}

            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:525:70: ( COMMA BINARY BASE64 )
            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:525:71: COMMA BINARY BASE64
            	        	{
            	        		COMMA87=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_forClause4236); if (state.failed) return retval;
            	        		if ( state.backtracking == 0 )
            	        		{COMMA87_tree = (CommonTree)adaptor.Create(COMMA87);
            	        			adaptor.AddChild(root_0, COMMA87_tree);
            	        		}
            	        		BINARY88=(IToken)Match(input,BINARY,FOLLOW_BINARY_in_forClause4238); if (state.failed) return retval;
            	        		if ( state.backtracking == 0 )
            	        		{BINARY88_tree = (CommonTree)adaptor.Create(BINARY88);
            	        			adaptor.AddChild(root_0, BINARY88_tree);
            	        		}
            	        		BASE6489=(IToken)Match(input,BASE64,FOLLOW_BASE64_in_forClause4240); if (state.failed) return retval;
            	        		if ( state.backtracking == 0 )
            	        		{BASE6489_tree = (CommonTree)adaptor.Create(BASE6489);
            	        			adaptor.AddChild(root_0, BASE6489_tree);
            	        		}

            	        	}


            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 16, forClause_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "forClause"

    public class computeClause_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "computeClause"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:529:1: computeClause : COMPUTE identifier LPAREN expression RPAREN ( COMMA identifier LPAREN expression RPAREN )* ( BY expression ( COMMA expression )* )? ;
    public SqlParser.computeClause_return computeClause() // throws RecognitionException [1]
    {   
        SqlParser.computeClause_return retval = new SqlParser.computeClause_return();
        retval.Start = input.LT(1);
        int computeClause_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken COMPUTE90 = null;
        IToken LPAREN92 = null;
        IToken RPAREN94 = null;
        IToken COMMA95 = null;
        IToken LPAREN97 = null;
        IToken RPAREN99 = null;
        IToken BY100 = null;
        IToken COMMA102 = null;
        SqlParser.identifier_return identifier91 = default(SqlParser.identifier_return);

        SqlParser.expression_return expression93 = default(SqlParser.expression_return);

        SqlParser.identifier_return identifier96 = default(SqlParser.identifier_return);

        SqlParser.expression_return expression98 = default(SqlParser.expression_return);

        SqlParser.expression_return expression101 = default(SqlParser.expression_return);

        SqlParser.expression_return expression103 = default(SqlParser.expression_return);


        CommonTree COMPUTE90_tree=null;
        CommonTree LPAREN92_tree=null;
        CommonTree RPAREN94_tree=null;
        CommonTree COMMA95_tree=null;
        CommonTree LPAREN97_tree=null;
        CommonTree RPAREN99_tree=null;
        CommonTree BY100_tree=null;
        CommonTree COMMA102_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 17) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:530:5: ( COMPUTE identifier LPAREN expression RPAREN ( COMMA identifier LPAREN expression RPAREN )* ( BY expression ( COMMA expression )* )? )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:531:5: COMPUTE identifier LPAREN expression RPAREN ( COMMA identifier LPAREN expression RPAREN )* ( BY expression ( COMMA expression )* )?
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	COMPUTE90=(IToken)Match(input,COMPUTE,FOLLOW_COMPUTE_in_computeClause4268); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{COMPUTE90_tree = (CommonTree)adaptor.Create(COMPUTE90);
            		adaptor.AddChild(root_0, COMPUTE90_tree);
            	}
            	PushFollow(FOLLOW_identifier_in_computeClause4279);
            	identifier91 = identifier();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, identifier91.Tree);
            	LPAREN92=(IToken)Match(input,LPAREN,FOLLOW_LPAREN_in_computeClause4281); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{LPAREN92_tree = (CommonTree)adaptor.Create(LPAREN92);
            		adaptor.AddChild(root_0, LPAREN92_tree);
            	}
            	PushFollow(FOLLOW_expression_in_computeClause4283);
            	expression93 = expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression93.Tree);
            	RPAREN94=(IToken)Match(input,RPAREN,FOLLOW_RPAREN_in_computeClause4285); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{RPAREN94_tree = (CommonTree)adaptor.Create(RPAREN94);
            		adaptor.AddChild(root_0, RPAREN94_tree);
            	}
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:534:5: ( COMMA identifier LPAREN expression RPAREN )*
            	do 
            	{
            	    int alt32 = 2;
            	    int LA32_0 = input.LA(1);

            	    if ( (LA32_0 == COMMA) )
            	    {
            	        alt32 = 1;
            	    }


            	    switch (alt32) 
            		{
            			case 1 :
            			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:534:6: COMMA identifier LPAREN expression RPAREN
            			    {
            			    	COMMA95=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_computeClause4292); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{COMMA95_tree = (CommonTree)adaptor.Create(COMMA95);
            			    		adaptor.AddChild(root_0, COMMA95_tree);
            			    	}
            			    	PushFollow(FOLLOW_identifier_in_computeClause4294);
            			    	identifier96 = identifier();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, identifier96.Tree);
            			    	LPAREN97=(IToken)Match(input,LPAREN,FOLLOW_LPAREN_in_computeClause4296); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{LPAREN97_tree = (CommonTree)adaptor.Create(LPAREN97);
            			    		adaptor.AddChild(root_0, LPAREN97_tree);
            			    	}
            			    	PushFollow(FOLLOW_expression_in_computeClause4298);
            			    	expression98 = expression();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression98.Tree);
            			    	RPAREN99=(IToken)Match(input,RPAREN,FOLLOW_RPAREN_in_computeClause4300); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{RPAREN99_tree = (CommonTree)adaptor.Create(RPAREN99);
            			    		adaptor.AddChild(root_0, RPAREN99_tree);
            			    	}

            			    }
            			    break;

            			default:
            			    goto loop32;
            	    }
            	} while (true);

            	loop32:
            		;	// Stops C# compiler whining that label 'loop32' has no statements

            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:535:5: ( BY expression ( COMMA expression )* )?
            	int alt34 = 2;
            	int LA34_0 = input.LA(1);

            	if ( (LA34_0 == BY) )
            	{
            	    alt34 = 1;
            	}
            	switch (alt34) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:535:6: BY expression ( COMMA expression )*
            	        {
            	        	BY100=(IToken)Match(input,BY,FOLLOW_BY_in_computeClause4309); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{BY100_tree = (CommonTree)adaptor.Create(BY100);
            	        		adaptor.AddChild(root_0, BY100_tree);
            	        	}
            	        	PushFollow(FOLLOW_expression_in_computeClause4311);
            	        	expression101 = expression();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression101.Tree);
            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:535:20: ( COMMA expression )*
            	        	do 
            	        	{
            	        	    int alt33 = 2;
            	        	    int LA33_0 = input.LA(1);

            	        	    if ( (LA33_0 == COMMA) )
            	        	    {
            	        	        alt33 = 1;
            	        	    }


            	        	    switch (alt33) 
            	        		{
            	        			case 1 :
            	        			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:535:21: COMMA expression
            	        			    {
            	        			    	COMMA102=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_computeClause4314); if (state.failed) return retval;
            	        			    	if ( state.backtracking == 0 )
            	        			    	{COMMA102_tree = (CommonTree)adaptor.Create(COMMA102);
            	        			    		adaptor.AddChild(root_0, COMMA102_tree);
            	        			    	}
            	        			    	PushFollow(FOLLOW_expression_in_computeClause4316);
            	        			    	expression103 = expression();
            	        			    	state.followingStackPointer--;
            	        			    	if (state.failed) return retval;
            	        			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression103.Tree);

            	        			    }
            	        			    break;

            	        			default:
            	        			    goto loop33;
            	        	    }
            	        	} while (true);

            	        	loop33:
            	        		;	// Stops C# compiler whining that label 'loop33' has no statements


            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 17, computeClause_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "computeClause"

    public class searchCondition_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "searchCondition"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:538:1: searchCondition : andSearchCondition ( OR andSearchCondition )* ;
    public SqlParser.searchCondition_return searchCondition() // throws RecognitionException [1]
    {   
        SqlParser.searchCondition_return retval = new SqlParser.searchCondition_return();
        retval.Start = input.LT(1);
        int searchCondition_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken OR105 = null;
        SqlParser.andSearchCondition_return andSearchCondition104 = default(SqlParser.andSearchCondition_return);

        SqlParser.andSearchCondition_return andSearchCondition106 = default(SqlParser.andSearchCondition_return);


        CommonTree OR105_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 18) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:539:1: ( andSearchCondition ( OR andSearchCondition )* )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:539:3: andSearchCondition ( OR andSearchCondition )*
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	PushFollow(FOLLOW_andSearchCondition_in_searchCondition4334);
            	andSearchCondition104 = andSearchCondition();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, andSearchCondition104.Tree);
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:539:22: ( OR andSearchCondition )*
            	do 
            	{
            	    int alt35 = 2;
            	    alt35 = dfa35.Predict(input);
            	    switch (alt35) 
            		{
            			case 1 :
            			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:539:23: OR andSearchCondition
            			    {
            			    	OR105=(IToken)Match(input,OR,FOLLOW_OR_in_searchCondition4337); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{OR105_tree = (CommonTree)adaptor.Create(OR105);
            			    		root_0 = (CommonTree)adaptor.BecomeRoot(OR105_tree, root_0);
            			    	}
            			    	PushFollow(FOLLOW_andSearchCondition_in_searchCondition4340);
            			    	andSearchCondition106 = andSearchCondition();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, andSearchCondition106.Tree);

            			    }
            			    break;

            			default:
            			    goto loop35;
            	    }
            	} while (true);

            	loop35:
            		;	// Stops C# compiler whining that label 'loop35' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 18, searchCondition_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "searchCondition"

    public class andSearchCondition_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "andSearchCondition"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:542:1: andSearchCondition : negsubSearchCondition ( AND negsubSearchCondition )* ;
    public SqlParser.andSearchCondition_return andSearchCondition() // throws RecognitionException [1]
    {   
        SqlParser.andSearchCondition_return retval = new SqlParser.andSearchCondition_return();
        retval.Start = input.LT(1);
        int andSearchCondition_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken AND108 = null;
        SqlParser.negsubSearchCondition_return negsubSearchCondition107 = default(SqlParser.negsubSearchCondition_return);

        SqlParser.negsubSearchCondition_return negsubSearchCondition109 = default(SqlParser.negsubSearchCondition_return);


        CommonTree AND108_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 19) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:543:5: ( negsubSearchCondition ( AND negsubSearchCondition )* )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:543:7: negsubSearchCondition ( AND negsubSearchCondition )*
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	PushFollow(FOLLOW_negsubSearchCondition_in_andSearchCondition4355);
            	negsubSearchCondition107 = negsubSearchCondition();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, negsubSearchCondition107.Tree);
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:543:29: ( AND negsubSearchCondition )*
            	do 
            	{
            	    int alt36 = 2;
            	    alt36 = dfa36.Predict(input);
            	    switch (alt36) 
            		{
            			case 1 :
            			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:543:31: AND negsubSearchCondition
            			    {
            			    	AND108=(IToken)Match(input,AND,FOLLOW_AND_in_andSearchCondition4359); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{AND108_tree = (CommonTree)adaptor.Create(AND108);
            			    		root_0 = (CommonTree)adaptor.BecomeRoot(AND108_tree, root_0);
            			    	}
            			    	PushFollow(FOLLOW_negsubSearchCondition_in_andSearchCondition4362);
            			    	negsubSearchCondition109 = negsubSearchCondition();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, negsubSearchCondition109.Tree);

            			    }
            			    break;

            			default:
            			    goto loop36;
            	    }
            	} while (true);

            	loop36:
            		;	// Stops C# compiler whining that label 'loop36' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 19, andSearchCondition_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "andSearchCondition"

    public class negsubSearchCondition_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "negsubSearchCondition"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:546:1: negsubSearchCondition : ( NOT subSearchCondition -> ^( NOT subSearchCondition ) | subSearchCondition );
    public SqlParser.negsubSearchCondition_return negsubSearchCondition() // throws RecognitionException [1]
    {   
        SqlParser.negsubSearchCondition_return retval = new SqlParser.negsubSearchCondition_return();
        retval.Start = input.LT(1);
        int negsubSearchCondition_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken NOT110 = null;
        SqlParser.subSearchCondition_return subSearchCondition111 = default(SqlParser.subSearchCondition_return);

        SqlParser.subSearchCondition_return subSearchCondition112 = default(SqlParser.subSearchCondition_return);


        CommonTree NOT110_tree=null;
        RewriteRuleTokenStream stream_NOT = new RewriteRuleTokenStream(adaptor,"token NOT");
        RewriteRuleSubtreeStream stream_subSearchCondition = new RewriteRuleSubtreeStream(adaptor,"rule subSearchCondition");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 20) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:547:5: ( NOT subSearchCondition -> ^( NOT subSearchCondition ) | subSearchCondition )
            int alt37 = 2;
            alt37 = dfa37.Predict(input);
            switch (alt37) 
            {
                case 1 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:547:7: NOT subSearchCondition
                    {
                    	NOT110=(IToken)Match(input,NOT,FOLLOW_NOT_in_negsubSearchCondition4382); if (state.failed) return retval; 
                    	if ( (state.backtracking==0) ) stream_NOT.Add(NOT110);

                    	PushFollow(FOLLOW_subSearchCondition_in_negsubSearchCondition4384);
                    	subSearchCondition111 = subSearchCondition();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( (state.backtracking==0) ) stream_subSearchCondition.Add(subSearchCondition111.Tree);


                    	// AST REWRITE
                    	// elements:          NOT, subSearchCondition
                    	// token labels:      
                    	// rule labels:       retval
                    	// token list labels: 
                    	// rule list labels:  
                    	// wildcard labels: 
                    	if ( (state.backtracking==0) ) {
                    	retval.Tree = root_0;
                    	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	root_0 = (CommonTree)adaptor.GetNilNode();
                    	// 548:5: -> ^( NOT subSearchCondition )
                    	{
                    	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:548:8: ^( NOT subSearchCondition )
                    	    {
                    	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
                    	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_NOT.NextNode(), root_1);

                    	    adaptor.AddChild(root_1, stream_subSearchCondition.NextTree());

                    	    adaptor.AddChild(root_0, root_1);
                    	    }

                    	}

                    	retval.Tree = root_0;retval.Tree = root_0;}
                    }
                    break;
                case 2 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:549:7: subSearchCondition
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_subSearchCondition_in_negsubSearchCondition4404);
                    	subSearchCondition112 = subSearchCondition();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, subSearchCondition112.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 20, negsubSearchCondition_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "negsubSearchCondition"

    public class subSearchCondition_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "subSearchCondition"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:552:1: subSearchCondition : ( LPAREN ( ( searchCondition )=> searchCondition ) RPAREN | predicate );
    public SqlParser.subSearchCondition_return subSearchCondition() // throws RecognitionException [1]
    {   
        SqlParser.subSearchCondition_return retval = new SqlParser.subSearchCondition_return();
        retval.Start = input.LT(1);
        int subSearchCondition_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken LPAREN113 = null;
        IToken RPAREN115 = null;
        SqlParser.searchCondition_return searchCondition114 = default(SqlParser.searchCondition_return);

        SqlParser.predicate_return predicate116 = default(SqlParser.predicate_return);


        CommonTree LPAREN113_tree=null;
        CommonTree RPAREN115_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 21) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:553:5: ( LPAREN ( ( searchCondition )=> searchCondition ) RPAREN | predicate )
            int alt38 = 2;
            alt38 = dfa38.Predict(input);
            switch (alt38) 
            {
                case 1 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:556:11: LPAREN ( ( searchCondition )=> searchCondition ) RPAREN
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	LPAREN113=(IToken)Match(input,LPAREN,FOLLOW_LPAREN_in_subSearchCondition4433); if (state.failed) return retval;
                    	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:556:19: ( ( searchCondition )=> searchCondition )
                    	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:556:21: ( searchCondition )=> searchCondition
                    	{
                    		PushFollow(FOLLOW_searchCondition_in_subSearchCondition4444);
                    		searchCondition114 = searchCondition();
                    		state.followingStackPointer--;
                    		if (state.failed) return retval;
                    		if ( state.backtracking == 0 ) adaptor.AddChild(root_0, searchCondition114.Tree);

                    	}

                    	RPAREN115=(IToken)Match(input,RPAREN,FOLLOW_RPAREN_in_subSearchCondition4448); if (state.failed) return retval;

                    }
                    break;
                case 2 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:559:11: predicate
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_predicate_in_subSearchCondition4463);
                    	predicate116 = predicate();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, predicate116.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 21, subSearchCondition_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "subSearchCondition"

    public class predicate_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "predicate"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:563:1: predicate : (lhs= expression (op= comparisonOperator (rhs= expression | (mod= ALL | mod= SOME | mod= ANY ) LPAREN ss= selectStatement RPAREN ) -> { $ss.text == null }? ^( $op $lhs $rhs) -> ^( $op $lhs ^( $mod $ss) ) | IS (c= NOT )? NULL -> {$c.text == null }? ^( IS $lhs NULL ) -> ^( NOT ^( IS $lhs NULL ) ) | (b= NOT )? ( LIKE e= expression ( ESCAPE expression )? -> {$b.text == null}? ^( LIKE $lhs $e) -> ^( NOT ^( LIKE $lhs $e) ) | BETWEEN l= expression AND h= expression -> {$b.text == null}? ^( BETWEEN $lhs $l $h) -> ^( NOT ^( BETWEEN $lhs $l $h) ) | inVar= IN LPAREN ( ( selectStatement )=>x= selectStatement -> {$b.text == null}? ^( IN $lhs selectStatement ) -> ^( NOT ^( IN $lhs selectStatement ) ) | re2+= expression ( COMMA re2+= expression )* -> {$b.text == null}? ^( IN $lhs ^( ARRAY ( $re2)+ ) ) -> ^( NOT ^( IN $lhs ^( ARRAY ( $re2)+ ) ) ) ) RPAREN ) | CONTAINS LPAREN ( dbObject | STAR ) COMMA ( stringLiteral | Variable ) RPAREN | FREETEXT LPAREN ( dbObject | STAR ) COMMA ( stringLiteral | Variable ) RPAREN ) | existsVar= EXISTS LPAREN y= selectStatement RPAREN -> ^( EXISTS selectStatement ) ) ;
    public SqlParser.predicate_return predicate() // throws RecognitionException [1]
    {   
        SqlParser.predicate_return retval = new SqlParser.predicate_return();
        retval.Start = input.LT(1);
        int predicate_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken mod = null;
        IToken c = null;
        IToken b = null;
        IToken inVar = null;
        IToken existsVar = null;
        IToken LPAREN117 = null;
        IToken RPAREN118 = null;
        IToken IS119 = null;
        IToken NULL120 = null;
        IToken LIKE121 = null;
        IToken ESCAPE122 = null;
        IToken BETWEEN124 = null;
        IToken AND125 = null;
        IToken LPAREN126 = null;
        IToken COMMA127 = null;
        IToken RPAREN128 = null;
        IToken CONTAINS129 = null;
        IToken LPAREN130 = null;
        IToken STAR132 = null;
        IToken COMMA133 = null;
        IToken Variable135 = null;
        IToken RPAREN136 = null;
        IToken FREETEXT137 = null;
        IToken LPAREN138 = null;
        IToken STAR140 = null;
        IToken COMMA141 = null;
        IToken Variable143 = null;
        IToken RPAREN144 = null;
        IToken LPAREN145 = null;
        IToken RPAREN146 = null;
        IList list_re2 = null;
        SqlParser.expression_return lhs = default(SqlParser.expression_return);

        SqlParser.comparisonOperator_return op = default(SqlParser.comparisonOperator_return);

        SqlParser.expression_return rhs = default(SqlParser.expression_return);

        SqlParser.selectStatement_return ss = default(SqlParser.selectStatement_return);

        SqlParser.expression_return e = default(SqlParser.expression_return);

        SqlParser.expression_return l = default(SqlParser.expression_return);

        SqlParser.expression_return h = default(SqlParser.expression_return);

        SqlParser.selectStatement_return x = default(SqlParser.selectStatement_return);

        SqlParser.selectStatement_return y = default(SqlParser.selectStatement_return);

        SqlParser.expression_return expression123 = default(SqlParser.expression_return);

        SqlParser.dbObject_return dbObject131 = default(SqlParser.dbObject_return);

        SqlParser.stringLiteral_return stringLiteral134 = default(SqlParser.stringLiteral_return);

        SqlParser.dbObject_return dbObject139 = default(SqlParser.dbObject_return);

        SqlParser.stringLiteral_return stringLiteral142 = default(SqlParser.stringLiteral_return);

        SqlParser.expression_return re2 = default(SqlParser.expression_return);
         re2 = null;
        CommonTree mod_tree=null;
        CommonTree c_tree=null;
        CommonTree b_tree=null;
        CommonTree inVar_tree=null;
        CommonTree existsVar_tree=null;
        CommonTree LPAREN117_tree=null;
        CommonTree RPAREN118_tree=null;
        CommonTree IS119_tree=null;
        CommonTree NULL120_tree=null;
        CommonTree LIKE121_tree=null;
        CommonTree ESCAPE122_tree=null;
        CommonTree BETWEEN124_tree=null;
        CommonTree AND125_tree=null;
        CommonTree LPAREN126_tree=null;
        CommonTree COMMA127_tree=null;
        CommonTree RPAREN128_tree=null;
        CommonTree CONTAINS129_tree=null;
        CommonTree LPAREN130_tree=null;
        CommonTree STAR132_tree=null;
        CommonTree COMMA133_tree=null;
        CommonTree Variable135_tree=null;
        CommonTree RPAREN136_tree=null;
        CommonTree FREETEXT137_tree=null;
        CommonTree LPAREN138_tree=null;
        CommonTree STAR140_tree=null;
        CommonTree COMMA141_tree=null;
        CommonTree Variable143_tree=null;
        CommonTree RPAREN144_tree=null;
        CommonTree LPAREN145_tree=null;
        CommonTree RPAREN146_tree=null;
        RewriteRuleTokenStream stream_FREETEXT = new RewriteRuleTokenStream(adaptor,"token FREETEXT");
        RewriteRuleTokenStream stream_RPAREN = new RewriteRuleTokenStream(adaptor,"token RPAREN");
        RewriteRuleTokenStream stream_Variable = new RewriteRuleTokenStream(adaptor,"token Variable");
        RewriteRuleTokenStream stream_STAR = new RewriteRuleTokenStream(adaptor,"token STAR");
        RewriteRuleTokenStream stream_ANY = new RewriteRuleTokenStream(adaptor,"token ANY");
        RewriteRuleTokenStream stream_IN = new RewriteRuleTokenStream(adaptor,"token IN");
        RewriteRuleTokenStream stream_ESCAPE = new RewriteRuleTokenStream(adaptor,"token ESCAPE");
        RewriteRuleTokenStream stream_COMMA = new RewriteRuleTokenStream(adaptor,"token COMMA");
        RewriteRuleTokenStream stream_IS = new RewriteRuleTokenStream(adaptor,"token IS");
        RewriteRuleTokenStream stream_SOME = new RewriteRuleTokenStream(adaptor,"token SOME");
        RewriteRuleTokenStream stream_CONTAINS = new RewriteRuleTokenStream(adaptor,"token CONTAINS");
        RewriteRuleTokenStream stream_ALL = new RewriteRuleTokenStream(adaptor,"token ALL");
        RewriteRuleTokenStream stream_NULL = new RewriteRuleTokenStream(adaptor,"token NULL");
        RewriteRuleTokenStream stream_NOT = new RewriteRuleTokenStream(adaptor,"token NOT");
        RewriteRuleTokenStream stream_EXISTS = new RewriteRuleTokenStream(adaptor,"token EXISTS");
        RewriteRuleTokenStream stream_AND = new RewriteRuleTokenStream(adaptor,"token AND");
        RewriteRuleTokenStream stream_BETWEEN = new RewriteRuleTokenStream(adaptor,"token BETWEEN");
        RewriteRuleTokenStream stream_LPAREN = new RewriteRuleTokenStream(adaptor,"token LPAREN");
        RewriteRuleTokenStream stream_LIKE = new RewriteRuleTokenStream(adaptor,"token LIKE");
        RewriteRuleSubtreeStream stream_expression = new RewriteRuleSubtreeStream(adaptor,"rule expression");
        RewriteRuleSubtreeStream stream_selectStatement = new RewriteRuleSubtreeStream(adaptor,"rule selectStatement");
        RewriteRuleSubtreeStream stream_dbObject = new RewriteRuleSubtreeStream(adaptor,"rule dbObject");
        RewriteRuleSubtreeStream stream_stringLiteral = new RewriteRuleSubtreeStream(adaptor,"rule stringLiteral");
        RewriteRuleSubtreeStream stream_comparisonOperator = new RewriteRuleSubtreeStream(adaptor,"rule comparisonOperator");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 22) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:564:5: ( (lhs= expression (op= comparisonOperator (rhs= expression | (mod= ALL | mod= SOME | mod= ANY ) LPAREN ss= selectStatement RPAREN ) -> { $ss.text == null }? ^( $op $lhs $rhs) -> ^( $op $lhs ^( $mod $ss) ) | IS (c= NOT )? NULL -> {$c.text == null }? ^( IS $lhs NULL ) -> ^( NOT ^( IS $lhs NULL ) ) | (b= NOT )? ( LIKE e= expression ( ESCAPE expression )? -> {$b.text == null}? ^( LIKE $lhs $e) -> ^( NOT ^( LIKE $lhs $e) ) | BETWEEN l= expression AND h= expression -> {$b.text == null}? ^( BETWEEN $lhs $l $h) -> ^( NOT ^( BETWEEN $lhs $l $h) ) | inVar= IN LPAREN ( ( selectStatement )=>x= selectStatement -> {$b.text == null}? ^( IN $lhs selectStatement ) -> ^( NOT ^( IN $lhs selectStatement ) ) | re2+= expression ( COMMA re2+= expression )* -> {$b.text == null}? ^( IN $lhs ^( ARRAY ( $re2)+ ) ) -> ^( NOT ^( IN $lhs ^( ARRAY ( $re2)+ ) ) ) ) RPAREN ) | CONTAINS LPAREN ( dbObject | STAR ) COMMA ( stringLiteral | Variable ) RPAREN | FREETEXT LPAREN ( dbObject | STAR ) COMMA ( stringLiteral | Variable ) RPAREN ) | existsVar= EXISTS LPAREN y= selectStatement RPAREN -> ^( EXISTS selectStatement ) ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:565:5: (lhs= expression (op= comparisonOperator (rhs= expression | (mod= ALL | mod= SOME | mod= ANY ) LPAREN ss= selectStatement RPAREN ) -> { $ss.text == null }? ^( $op $lhs $rhs) -> ^( $op $lhs ^( $mod $ss) ) | IS (c= NOT )? NULL -> {$c.text == null }? ^( IS $lhs NULL ) -> ^( NOT ^( IS $lhs NULL ) ) | (b= NOT )? ( LIKE e= expression ( ESCAPE expression )? -> {$b.text == null}? ^( LIKE $lhs $e) -> ^( NOT ^( LIKE $lhs $e) ) | BETWEEN l= expression AND h= expression -> {$b.text == null}? ^( BETWEEN $lhs $l $h) -> ^( NOT ^( BETWEEN $lhs $l $h) ) | inVar= IN LPAREN ( ( selectStatement )=>x= selectStatement -> {$b.text == null}? ^( IN $lhs selectStatement ) -> ^( NOT ^( IN $lhs selectStatement ) ) | re2+= expression ( COMMA re2+= expression )* -> {$b.text == null}? ^( IN $lhs ^( ARRAY ( $re2)+ ) ) -> ^( NOT ^( IN $lhs ^( ARRAY ( $re2)+ ) ) ) ) RPAREN ) | CONTAINS LPAREN ( dbObject | STAR ) COMMA ( stringLiteral | Variable ) RPAREN | FREETEXT LPAREN ( dbObject | STAR ) COMMA ( stringLiteral | Variable ) RPAREN ) | existsVar= EXISTS LPAREN y= selectStatement RPAREN -> ^( EXISTS selectStatement ) )
            {
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:565:5: (lhs= expression (op= comparisonOperator (rhs= expression | (mod= ALL | mod= SOME | mod= ANY ) LPAREN ss= selectStatement RPAREN ) -> { $ss.text == null }? ^( $op $lhs $rhs) -> ^( $op $lhs ^( $mod $ss) ) | IS (c= NOT )? NULL -> {$c.text == null }? ^( IS $lhs NULL ) -> ^( NOT ^( IS $lhs NULL ) ) | (b= NOT )? ( LIKE e= expression ( ESCAPE expression )? -> {$b.text == null}? ^( LIKE $lhs $e) -> ^( NOT ^( LIKE $lhs $e) ) | BETWEEN l= expression AND h= expression -> {$b.text == null}? ^( BETWEEN $lhs $l $h) -> ^( NOT ^( BETWEEN $lhs $l $h) ) | inVar= IN LPAREN ( ( selectStatement )=>x= selectStatement -> {$b.text == null}? ^( IN $lhs selectStatement ) -> ^( NOT ^( IN $lhs selectStatement ) ) | re2+= expression ( COMMA re2+= expression )* -> {$b.text == null}? ^( IN $lhs ^( ARRAY ( $re2)+ ) ) -> ^( NOT ^( IN $lhs ^( ARRAY ( $re2)+ ) ) ) ) RPAREN ) | CONTAINS LPAREN ( dbObject | STAR ) COMMA ( stringLiteral | Variable ) RPAREN | FREETEXT LPAREN ( dbObject | STAR ) COMMA ( stringLiteral | Variable ) RPAREN ) | existsVar= EXISTS LPAREN y= selectStatement RPAREN -> ^( EXISTS selectStatement ) )
            	int alt52 = 2;
            	alt52 = dfa52.Predict(input);
            	switch (alt52) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:566:7: lhs= expression (op= comparisonOperator (rhs= expression | (mod= ALL | mod= SOME | mod= ANY ) LPAREN ss= selectStatement RPAREN ) -> { $ss.text == null }? ^( $op $lhs $rhs) -> ^( $op $lhs ^( $mod $ss) ) | IS (c= NOT )? NULL -> {$c.text == null }? ^( IS $lhs NULL ) -> ^( NOT ^( IS $lhs NULL ) ) | (b= NOT )? ( LIKE e= expression ( ESCAPE expression )? -> {$b.text == null}? ^( LIKE $lhs $e) -> ^( NOT ^( LIKE $lhs $e) ) | BETWEEN l= expression AND h= expression -> {$b.text == null}? ^( BETWEEN $lhs $l $h) -> ^( NOT ^( BETWEEN $lhs $l $h) ) | inVar= IN LPAREN ( ( selectStatement )=>x= selectStatement -> {$b.text == null}? ^( IN $lhs selectStatement ) -> ^( NOT ^( IN $lhs selectStatement ) ) | re2+= expression ( COMMA re2+= expression )* -> {$b.text == null}? ^( IN $lhs ^( ARRAY ( $re2)+ ) ) -> ^( NOT ^( IN $lhs ^( ARRAY ( $re2)+ ) ) ) ) RPAREN ) | CONTAINS LPAREN ( dbObject | STAR ) COMMA ( stringLiteral | Variable ) RPAREN | FREETEXT LPAREN ( dbObject | STAR ) COMMA ( stringLiteral | Variable ) RPAREN )
            	        {
            	        	PushFollow(FOLLOW_expression_in_predicate4503);
            	        	lhs = expression();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_expression.Add(lhs.Tree);
            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:566:22: (op= comparisonOperator (rhs= expression | (mod= ALL | mod= SOME | mod= ANY ) LPAREN ss= selectStatement RPAREN ) -> { $ss.text == null }? ^( $op $lhs $rhs) -> ^( $op $lhs ^( $mod $ss) ) | IS (c= NOT )? NULL -> {$c.text == null }? ^( IS $lhs NULL ) -> ^( NOT ^( IS $lhs NULL ) ) | (b= NOT )? ( LIKE e= expression ( ESCAPE expression )? -> {$b.text == null}? ^( LIKE $lhs $e) -> ^( NOT ^( LIKE $lhs $e) ) | BETWEEN l= expression AND h= expression -> {$b.text == null}? ^( BETWEEN $lhs $l $h) -> ^( NOT ^( BETWEEN $lhs $l $h) ) | inVar= IN LPAREN ( ( selectStatement )=>x= selectStatement -> {$b.text == null}? ^( IN $lhs selectStatement ) -> ^( NOT ^( IN $lhs selectStatement ) ) | re2+= expression ( COMMA re2+= expression )* -> {$b.text == null}? ^( IN $lhs ^( ARRAY ( $re2)+ ) ) -> ^( NOT ^( IN $lhs ^( ARRAY ( $re2)+ ) ) ) ) RPAREN ) | CONTAINS LPAREN ( dbObject | STAR ) COMMA ( stringLiteral | Variable ) RPAREN | FREETEXT LPAREN ( dbObject | STAR ) COMMA ( stringLiteral | Variable ) RPAREN )
            	        	int alt51 = 5;
            	        	switch ( input.LA(1) ) 
            	        	{
            	        	case ASSIGNEQUAL:
            	        	case NOTEQUAL1:
            	        	case NOTEQUAL2:
            	        	case LESSTHANOREQUALTO1:
            	        	case LESSTHANOREQUALTO2:
            	        	case LESSTHAN:
            	        	case GREATERTHANOREQUALTO1:
            	        	case GREATERTHANOREQUALTO2:
            	        	case GREATERTHAN:
            	        		{
            	        	    alt51 = 1;
            	        	    }
            	        	    break;
            	        	case IS:
            	        		{
            	        	    alt51 = 2;
            	        	    }
            	        	    break;
            	        	case BETWEEN:
            	        	case IN:
            	        	case LIKE:
            	        	case NOT:
            	        		{
            	        	    alt51 = 3;
            	        	    }
            	        	    break;
            	        	case CONTAINS:
            	        		{
            	        	    alt51 = 4;
            	        	    }
            	        	    break;
            	        	case FREETEXT:
            	        		{
            	        	    alt51 = 5;
            	        	    }
            	        	    break;
            	        		default:
            	        		    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	        		    NoViableAltException nvae_d51s0 =
            	        		        new NoViableAltException("", 51, 0, input);

            	        		    throw nvae_d51s0;
            	        	}

            	        	switch (alt51) 
            	        	{
            	        	    case 1 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:568:9: op= comparisonOperator (rhs= expression | (mod= ALL | mod= SOME | mod= ANY ) LPAREN ss= selectStatement RPAREN )
            	        	        {
            	        	        	PushFollow(FOLLOW_comparisonOperator_in_predicate4526);
            	        	        	op = comparisonOperator();
            	        	        	state.followingStackPointer--;
            	        	        	if (state.failed) return retval;
            	        	        	if ( (state.backtracking==0) ) stream_comparisonOperator.Add(op.Tree);
            	        	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:568:31: (rhs= expression | (mod= ALL | mod= SOME | mod= ANY ) LPAREN ss= selectStatement RPAREN )
            	        	        	int alt40 = 2;
            	        	        	alt40 = dfa40.Predict(input);
            	        	        	switch (alt40) 
            	        	        	{
            	        	        	    case 1 :
            	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:569:13: rhs= expression
            	        	        	        {
            	        	        	        	PushFollow(FOLLOW_expression_in_predicate4544);
            	        	        	        	rhs = expression();
            	        	        	        	state.followingStackPointer--;
            	        	        	        	if (state.failed) return retval;
            	        	        	        	if ( (state.backtracking==0) ) stream_expression.Add(rhs.Tree);

            	        	        	        }
            	        	        	        break;
            	        	        	    case 2 :
            	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:570:13: (mod= ALL | mod= SOME | mod= ANY ) LPAREN ss= selectStatement RPAREN
            	        	        	        {
            	        	        	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:570:13: (mod= ALL | mod= SOME | mod= ANY )
            	        	        	        	int alt39 = 3;
            	        	        	        	switch ( input.LA(1) ) 
            	        	        	        	{
            	        	        	        	case ALL:
            	        	        	        		{
            	        	        	        	    alt39 = 1;
            	        	        	        	    }
            	        	        	        	    break;
            	        	        	        	case SOME:
            	        	        	        		{
            	        	        	        	    alt39 = 2;
            	        	        	        	    }
            	        	        	        	    break;
            	        	        	        	case ANY:
            	        	        	        		{
            	        	        	        	    alt39 = 3;
            	        	        	        	    }
            	        	        	        	    break;
            	        	        	        		default:
            	        	        	        		    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	        	        	        		    NoViableAltException nvae_d39s0 =
            	        	        	        		        new NoViableAltException("", 39, 0, input);

            	        	        	        		    throw nvae_d39s0;
            	        	        	        	}

            	        	        	        	switch (alt39) 
            	        	        	        	{
            	        	        	        	    case 1 :
            	        	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:570:14: mod= ALL
            	        	        	        	        {
            	        	        	        	        	mod=(IToken)Match(input,ALL,FOLLOW_ALL_in_predicate4561); if (state.failed) return retval; 
            	        	        	        	        	if ( (state.backtracking==0) ) stream_ALL.Add(mod);


            	        	        	        	        }
            	        	        	        	        break;
            	        	        	        	    case 2 :
            	        	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:570:24: mod= SOME
            	        	        	        	        {
            	        	        	        	        	mod=(IToken)Match(input,SOME,FOLLOW_SOME_in_predicate4567); if (state.failed) return retval; 
            	        	        	        	        	if ( (state.backtracking==0) ) stream_SOME.Add(mod);


            	        	        	        	        }
            	        	        	        	        break;
            	        	        	        	    case 3 :
            	        	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:570:35: mod= ANY
            	        	        	        	        {
            	        	        	        	        	mod=(IToken)Match(input,ANY,FOLLOW_ANY_in_predicate4573); if (state.failed) return retval; 
            	        	        	        	        	if ( (state.backtracking==0) ) stream_ANY.Add(mod);


            	        	        	        	        }
            	        	        	        	        break;

            	        	        	        	}

            	        	        	        	LPAREN117=(IToken)Match(input,LPAREN,FOLLOW_LPAREN_in_predicate4576); if (state.failed) return retval; 
            	        	        	        	if ( (state.backtracking==0) ) stream_LPAREN.Add(LPAREN117);

            	        	        	        	PushFollow(FOLLOW_selectStatement_in_predicate4580);
            	        	        	        	ss = selectStatement();
            	        	        	        	state.followingStackPointer--;
            	        	        	        	if (state.failed) return retval;
            	        	        	        	if ( (state.backtracking==0) ) stream_selectStatement.Add(ss.Tree);
            	        	        	        	RPAREN118=(IToken)Match(input,RPAREN,FOLLOW_RPAREN_in_predicate4582); if (state.failed) return retval; 
            	        	        	        	if ( (state.backtracking==0) ) stream_RPAREN.Add(RPAREN118);

            	        	        	        	if ( (state.backtracking==0) )
            	        	        	        	{
            	        	        	        	   ((QueryScope_scope)QueryScope_stack.Peek()).current.addSubQueryInPredicate(((ss != null) ? ss.result : default(SqlQuery)), mod); 
            	        	        	        	}

            	        	        	        }
            	        	        	        break;

            	        	        	}



            	        	        	// AST REWRITE
            	        	        	// elements:          lhs, mod, ss, lhs, op, rhs, op
            	        	        	// token labels:      mod
            	        	        	// rule labels:       retval, op, rhs, ss, lhs
            	        	        	// token list labels: 
            	        	        	// rule list labels:  
            	        	        	// wildcard labels: 
            	        	        	if ( (state.backtracking==0) ) {
            	        	        	retval.Tree = root_0;
            	        	        	RewriteRuleTokenStream stream_mod = new RewriteRuleTokenStream(adaptor, "token mod", mod);
            	        	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);
            	        	        	RewriteRuleSubtreeStream stream_op = new RewriteRuleSubtreeStream(adaptor, "rule op", op!=null ? op.Tree : null);
            	        	        	RewriteRuleSubtreeStream stream_rhs = new RewriteRuleSubtreeStream(adaptor, "rule rhs", rhs!=null ? rhs.Tree : null);
            	        	        	RewriteRuleSubtreeStream stream_ss = new RewriteRuleSubtreeStream(adaptor, "rule ss", ss!=null ? ss.Tree : null);
            	        	        	RewriteRuleSubtreeStream stream_lhs = new RewriteRuleSubtreeStream(adaptor, "rule lhs", lhs!=null ? lhs.Tree : null);

            	        	        	root_0 = (CommonTree)adaptor.GetNilNode();
            	        	        	// 573:11: -> { $ss.text == null }? ^( $op $lhs $rhs)
            	        	        	if ( ((ss != null) ? input.ToString((IToken)(ss.Start),(IToken)(ss.Stop)) : null) == null )
            	        	        	{
            	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:573:36: ^( $op $lhs $rhs)
            	        	        	    {
            	        	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	        	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_op.NextNode(), root_1);

            	        	        	    adaptor.AddChild(root_1, stream_lhs.NextTree());
            	        	        	    adaptor.AddChild(root_1, stream_rhs.NextTree());

            	        	        	    adaptor.AddChild(root_0, root_1);
            	        	        	    }

            	        	        	}
            	        	        	else // 574:11: -> ^( $op $lhs ^( $mod $ss) )
            	        	        	{
            	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:574:14: ^( $op $lhs ^( $mod $ss) )
            	        	        	    {
            	        	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	        	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_op.NextNode(), root_1);

            	        	        	    adaptor.AddChild(root_1, stream_lhs.NextTree());
            	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:574:25: ^( $mod $ss)
            	        	        	    {
            	        	        	    CommonTree root_2 = (CommonTree)adaptor.GetNilNode();
            	        	        	    root_2 = (CommonTree)adaptor.BecomeRoot(stream_mod.NextNode(), root_2);

            	        	        	    adaptor.AddChild(root_2, stream_ss.NextTree());

            	        	        	    adaptor.AddChild(root_1, root_2);
            	        	        	    }

            	        	        	    adaptor.AddChild(root_0, root_1);
            	        	        	    }

            	        	        	}

            	        	        	retval.Tree = root_0;retval.Tree = root_0;}
            	        	        }
            	        	        break;
            	        	    case 2 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:577:9: IS (c= NOT )? NULL
            	        	        {
            	        	        	IS119=(IToken)Match(input,IS,FOLLOW_IS_in_predicate4674); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_IS.Add(IS119);

            	        	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:577:12: (c= NOT )?
            	        	        	int alt41 = 2;
            	        	        	int LA41_0 = input.LA(1);

            	        	        	if ( (LA41_0 == NOT) )
            	        	        	{
            	        	        	    alt41 = 1;
            	        	        	}
            	        	        	switch (alt41) 
            	        	        	{
            	        	        	    case 1 :
            	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:577:13: c= NOT
            	        	        	        {
            	        	        	        	c=(IToken)Match(input,NOT,FOLLOW_NOT_in_predicate4679); if (state.failed) return retval; 
            	        	        	        	if ( (state.backtracking==0) ) stream_NOT.Add(c);


            	        	        	        }
            	        	        	        break;

            	        	        	}

            	        	        	NULL120=(IToken)Match(input,NULL,FOLLOW_NULL_in_predicate4683); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_NULL.Add(NULL120);



            	        	        	// AST REWRITE
            	        	        	// elements:          NULL, NULL, NOT, lhs, lhs, IS, IS
            	        	        	// token labels:      
            	        	        	// rule labels:       retval, lhs
            	        	        	// token list labels: 
            	        	        	// rule list labels:  
            	        	        	// wildcard labels: 
            	        	        	if ( (state.backtracking==0) ) {
            	        	        	retval.Tree = root_0;
            	        	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);
            	        	        	RewriteRuleSubtreeStream stream_lhs = new RewriteRuleSubtreeStream(adaptor, "rule lhs", lhs!=null ? lhs.Tree : null);

            	        	        	root_0 = (CommonTree)adaptor.GetNilNode();
            	        	        	// 578:1: -> {$c.text == null }? ^( IS $lhs NULL )
            	        	        	if (((c != null) ? c.Text : null) == null )
            	        	        	{
            	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:578:24: ^( IS $lhs NULL )
            	        	        	    {
            	        	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	        	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_IS.NextNode(), root_1);

            	        	        	    adaptor.AddChild(root_1, stream_lhs.NextTree());
            	        	        	    adaptor.AddChild(root_1, stream_NULL.NextNode());

            	        	        	    adaptor.AddChild(root_0, root_1);
            	        	        	    }

            	        	        	}
            	        	        	else // 579:1: -> ^( NOT ^( IS $lhs NULL ) )
            	        	        	{
            	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:579:24: ^( NOT ^( IS $lhs NULL ) )
            	        	        	    {
            	        	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	        	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_NOT.NextNode(), root_1);

            	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:579:30: ^( IS $lhs NULL )
            	        	        	    {
            	        	        	    CommonTree root_2 = (CommonTree)adaptor.GetNilNode();
            	        	        	    root_2 = (CommonTree)adaptor.BecomeRoot(stream_IS.NextNode(), root_2);

            	        	        	    adaptor.AddChild(root_2, stream_lhs.NextTree());
            	        	        	    adaptor.AddChild(root_2, stream_NULL.NextNode());

            	        	        	    adaptor.AddChild(root_1, root_2);
            	        	        	    }

            	        	        	    adaptor.AddChild(root_0, root_1);
            	        	        	    }

            	        	        	}

            	        	        	retval.Tree = root_0;retval.Tree = root_0;}
            	        	        }
            	        	        break;
            	        	    case 3 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:580:9: (b= NOT )? ( LIKE e= expression ( ESCAPE expression )? -> {$b.text == null}? ^( LIKE $lhs $e) -> ^( NOT ^( LIKE $lhs $e) ) | BETWEEN l= expression AND h= expression -> {$b.text == null}? ^( BETWEEN $lhs $l $h) -> ^( NOT ^( BETWEEN $lhs $l $h) ) | inVar= IN LPAREN ( ( selectStatement )=>x= selectStatement -> {$b.text == null}? ^( IN $lhs selectStatement ) -> ^( NOT ^( IN $lhs selectStatement ) ) | re2+= expression ( COMMA re2+= expression )* -> {$b.text == null}? ^( IN $lhs ^( ARRAY ( $re2)+ ) ) -> ^( NOT ^( IN $lhs ^( ARRAY ( $re2)+ ) ) ) ) RPAREN )
            	        	        {
            	        	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:580:9: (b= NOT )?
            	        	        	int alt42 = 2;
            	        	        	int LA42_0 = input.LA(1);

            	        	        	if ( (LA42_0 == NOT) )
            	        	        	{
            	        	        	    alt42 = 1;
            	        	        	}
            	        	        	switch (alt42) 
            	        	        	{
            	        	        	    case 1 :
            	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:580:10: b= NOT
            	        	        	        {
            	        	        	        	b=(IToken)Match(input,NOT,FOLLOW_NOT_in_predicate4744); if (state.failed) return retval; 
            	        	        	        	if ( (state.backtracking==0) ) stream_NOT.Add(b);


            	        	        	        }
            	        	        	        break;

            	        	        	}

            	        	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:580:18: ( LIKE e= expression ( ESCAPE expression )? -> {$b.text == null}? ^( LIKE $lhs $e) -> ^( NOT ^( LIKE $lhs $e) ) | BETWEEN l= expression AND h= expression -> {$b.text == null}? ^( BETWEEN $lhs $l $h) -> ^( NOT ^( BETWEEN $lhs $l $h) ) | inVar= IN LPAREN ( ( selectStatement )=>x= selectStatement -> {$b.text == null}? ^( IN $lhs selectStatement ) -> ^( NOT ^( IN $lhs selectStatement ) ) | re2+= expression ( COMMA re2+= expression )* -> {$b.text == null}? ^( IN $lhs ^( ARRAY ( $re2)+ ) ) -> ^( NOT ^( IN $lhs ^( ARRAY ( $re2)+ ) ) ) ) RPAREN )
            	        	        	int alt46 = 3;
            	        	        	switch ( input.LA(1) ) 
            	        	        	{
            	        	        	case LIKE:
            	        	        		{
            	        	        	    alt46 = 1;
            	        	        	    }
            	        	        	    break;
            	        	        	case BETWEEN:
            	        	        		{
            	        	        	    alt46 = 2;
            	        	        	    }
            	        	        	    break;
            	        	        	case IN:
            	        	        		{
            	        	        	    alt46 = 3;
            	        	        	    }
            	        	        	    break;
            	        	        		default:
            	        	        		    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	        	        		    NoViableAltException nvae_d46s0 =
            	        	        		        new NoViableAltException("", 46, 0, input);

            	        	        		    throw nvae_d46s0;
            	        	        	}

            	        	        	switch (alt46) 
            	        	        	{
            	        	        	    case 1 :
            	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:581:11: LIKE e= expression ( ESCAPE expression )?
            	        	        	        {
            	        	        	        	LIKE121=(IToken)Match(input,LIKE,FOLLOW_LIKE_in_predicate4760); if (state.failed) return retval; 
            	        	        	        	if ( (state.backtracking==0) ) stream_LIKE.Add(LIKE121);

            	        	        	        	PushFollow(FOLLOW_expression_in_predicate4764);
            	        	        	        	e = expression();
            	        	        	        	state.followingStackPointer--;
            	        	        	        	if (state.failed) return retval;
            	        	        	        	if ( (state.backtracking==0) ) stream_expression.Add(e.Tree);
            	        	        	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:581:29: ( ESCAPE expression )?
            	        	        	        	int alt43 = 2;
            	        	        	        	alt43 = dfa43.Predict(input);
            	        	        	        	switch (alt43) 
            	        	        	        	{
            	        	        	        	    case 1 :
            	        	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:581:30: ESCAPE expression
            	        	        	        	        {
            	        	        	        	        	ESCAPE122=(IToken)Match(input,ESCAPE,FOLLOW_ESCAPE_in_predicate4767); if (state.failed) return retval; 
            	        	        	        	        	if ( (state.backtracking==0) ) stream_ESCAPE.Add(ESCAPE122);

            	        	        	        	        	PushFollow(FOLLOW_expression_in_predicate4769);
            	        	        	        	        	expression123 = expression();
            	        	        	        	        	state.followingStackPointer--;
            	        	        	        	        	if (state.failed) return retval;
            	        	        	        	        	if ( (state.backtracking==0) ) stream_expression.Add(expression123.Tree);

            	        	        	        	        }
            	        	        	        	        break;

            	        	        	        	}



            	        	        	        	// AST REWRITE
            	        	        	        	// elements:          e, LIKE, NOT, lhs, lhs, LIKE, e
            	        	        	        	// token labels:      
            	        	        	        	// rule labels:       retval, e, lhs
            	        	        	        	// token list labels: 
            	        	        	        	// rule list labels:  
            	        	        	        	// wildcard labels: 
            	        	        	        	if ( (state.backtracking==0) ) {
            	        	        	        	retval.Tree = root_0;
            	        	        	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);
            	        	        	        	RewriteRuleSubtreeStream stream_e = new RewriteRuleSubtreeStream(adaptor, "rule e", e!=null ? e.Tree : null);
            	        	        	        	RewriteRuleSubtreeStream stream_lhs = new RewriteRuleSubtreeStream(adaptor, "rule lhs", lhs!=null ? lhs.Tree : null);

            	        	        	        	root_0 = (CommonTree)adaptor.GetNilNode();
            	        	        	        	// 582:1: -> {$b.text == null}? ^( LIKE $lhs $e)
            	        	        	        	if (((b != null) ? b.Text : null) == null)
            	        	        	        	{
            	        	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:582:23: ^( LIKE $lhs $e)
            	        	        	        	    {
            	        	        	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	        	        	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_LIKE.NextNode(), root_1);

            	        	        	        	    adaptor.AddChild(root_1, stream_lhs.NextTree());
            	        	        	        	    adaptor.AddChild(root_1, stream_e.NextTree());

            	        	        	        	    adaptor.AddChild(root_0, root_1);
            	        	        	        	    }

            	        	        	        	}
            	        	        	        	else // 583:1: -> ^( NOT ^( LIKE $lhs $e) )
            	        	        	        	{
            	        	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:583:23: ^( NOT ^( LIKE $lhs $e) )
            	        	        	        	    {
            	        	        	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	        	        	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_NOT.NextNode(), root_1);

            	        	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:583:29: ^( LIKE $lhs $e)
            	        	        	        	    {
            	        	        	        	    CommonTree root_2 = (CommonTree)adaptor.GetNilNode();
            	        	        	        	    root_2 = (CommonTree)adaptor.BecomeRoot(stream_LIKE.NextNode(), root_2);

            	        	        	        	    adaptor.AddChild(root_2, stream_lhs.NextTree());
            	        	        	        	    adaptor.AddChild(root_2, stream_e.NextTree());

            	        	        	        	    adaptor.AddChild(root_1, root_2);
            	        	        	        	    }

            	        	        	        	    adaptor.AddChild(root_0, root_1);
            	        	        	        	    }

            	        	        	        	}

            	        	        	        	retval.Tree = root_0;retval.Tree = root_0;}
            	        	        	        }
            	        	        	        break;
            	        	        	    case 2 :
            	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:584:13: BETWEEN l= expression AND h= expression
            	        	        	        {
            	        	        	        	BETWEEN124=(IToken)Match(input,BETWEEN,FOLLOW_BETWEEN_in_predicate4835); if (state.failed) return retval; 
            	        	        	        	if ( (state.backtracking==0) ) stream_BETWEEN.Add(BETWEEN124);

            	        	        	        	PushFollow(FOLLOW_expression_in_predicate4839);
            	        	        	        	l = expression();
            	        	        	        	state.followingStackPointer--;
            	        	        	        	if (state.failed) return retval;
            	        	        	        	if ( (state.backtracking==0) ) stream_expression.Add(l.Tree);
            	        	        	        	AND125=(IToken)Match(input,AND,FOLLOW_AND_in_predicate4841); if (state.failed) return retval; 
            	        	        	        	if ( (state.backtracking==0) ) stream_AND.Add(AND125);

            	        	        	        	PushFollow(FOLLOW_expression_in_predicate4845);
            	        	        	        	h = expression();
            	        	        	        	state.followingStackPointer--;
            	        	        	        	if (state.failed) return retval;
            	        	        	        	if ( (state.backtracking==0) ) stream_expression.Add(h.Tree);


            	        	        	        	// AST REWRITE
            	        	        	        	// elements:          l, BETWEEN, h, lhs, BETWEEN, h, NOT, lhs, l
            	        	        	        	// token labels:      
            	        	        	        	// rule labels:       retval, l, h, lhs
            	        	        	        	// token list labels: 
            	        	        	        	// rule list labels:  
            	        	        	        	// wildcard labels: 
            	        	        	        	if ( (state.backtracking==0) ) {
            	        	        	        	retval.Tree = root_0;
            	        	        	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);
            	        	        	        	RewriteRuleSubtreeStream stream_l = new RewriteRuleSubtreeStream(adaptor, "rule l", l!=null ? l.Tree : null);
            	        	        	        	RewriteRuleSubtreeStream stream_h = new RewriteRuleSubtreeStream(adaptor, "rule h", h!=null ? h.Tree : null);
            	        	        	        	RewriteRuleSubtreeStream stream_lhs = new RewriteRuleSubtreeStream(adaptor, "rule lhs", lhs!=null ? lhs.Tree : null);

            	        	        	        	root_0 = (CommonTree)adaptor.GetNilNode();
            	        	        	        	// 585:1: -> {$b.text == null}? ^( BETWEEN $lhs $l $h)
            	        	        	        	if (((b != null) ? b.Text : null) == null)
            	        	        	        	{
            	        	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:585:23: ^( BETWEEN $lhs $l $h)
            	        	        	        	    {
            	        	        	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	        	        	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_BETWEEN.NextNode(), root_1);

            	        	        	        	    adaptor.AddChild(root_1, stream_lhs.NextTree());
            	        	        	        	    adaptor.AddChild(root_1, stream_l.NextTree());
            	        	        	        	    adaptor.AddChild(root_1, stream_h.NextTree());

            	        	        	        	    adaptor.AddChild(root_0, root_1);
            	        	        	        	    }

            	        	        	        	}
            	        	        	        	else // 586:1: -> ^( NOT ^( BETWEEN $lhs $l $h) )
            	        	        	        	{
            	        	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:586:23: ^( NOT ^( BETWEEN $lhs $l $h) )
            	        	        	        	    {
            	        	        	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	        	        	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_NOT.NextNode(), root_1);

            	        	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:586:29: ^( BETWEEN $lhs $l $h)
            	        	        	        	    {
            	        	        	        	    CommonTree root_2 = (CommonTree)adaptor.GetNilNode();
            	        	        	        	    root_2 = (CommonTree)adaptor.BecomeRoot(stream_BETWEEN.NextNode(), root_2);

            	        	        	        	    adaptor.AddChild(root_2, stream_lhs.NextTree());
            	        	        	        	    adaptor.AddChild(root_2, stream_l.NextTree());
            	        	        	        	    adaptor.AddChild(root_2, stream_h.NextTree());

            	        	        	        	    adaptor.AddChild(root_1, root_2);
            	        	        	        	    }

            	        	        	        	    adaptor.AddChild(root_0, root_1);
            	        	        	        	    }

            	        	        	        	}

            	        	        	        	retval.Tree = root_0;retval.Tree = root_0;}
            	        	        	        }
            	        	        	        break;
            	        	        	    case 3 :
            	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:587:13: inVar= IN LPAREN ( ( selectStatement )=>x= selectStatement -> {$b.text == null}? ^( IN $lhs selectStatement ) -> ^( NOT ^( IN $lhs selectStatement ) ) | re2+= expression ( COMMA re2+= expression )* -> {$b.text == null}? ^( IN $lhs ^( ARRAY ( $re2)+ ) ) -> ^( NOT ^( IN $lhs ^( ARRAY ( $re2)+ ) ) ) ) RPAREN
            	        	        	        {
            	        	        	        	inVar=(IToken)Match(input,IN,FOLLOW_IN_in_predicate4916); if (state.failed) return retval; 
            	        	        	        	if ( (state.backtracking==0) ) stream_IN.Add(inVar);

            	        	        	        	LPAREN126=(IToken)Match(input,LPAREN,FOLLOW_LPAREN_in_predicate4918); if (state.failed) return retval; 
            	        	        	        	if ( (state.backtracking==0) ) stream_LPAREN.Add(LPAREN126);

            	        	        	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:587:29: ( ( selectStatement )=>x= selectStatement -> {$b.text == null}? ^( IN $lhs selectStatement ) -> ^( NOT ^( IN $lhs selectStatement ) ) | re2+= expression ( COMMA re2+= expression )* -> {$b.text == null}? ^( IN $lhs ^( ARRAY ( $re2)+ ) ) -> ^( NOT ^( IN $lhs ^( ARRAY ( $re2)+ ) ) ) )
            	        	        	        	int alt45 = 2;
            	        	        	        	alt45 = dfa45.Predict(input);
            	        	        	        	switch (alt45) 
            	        	        	        	{
            	        	        	        	    case 1 :
            	        	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:588:17: ( selectStatement )=>x= selectStatement
            	        	        	        	        {
            	        	        	        	        	PushFollow(FOLLOW_selectStatement_in_predicate4946);
            	        	        	        	        	x = selectStatement();
            	        	        	        	        	state.followingStackPointer--;
            	        	        	        	        	if (state.failed) return retval;
            	        	        	        	        	if ( (state.backtracking==0) ) stream_selectStatement.Add(x.Tree);
            	        	        	        	        	if ( (state.backtracking==0) )
            	        	        	        	        	{
            	        	        	        	        	   ((QueryScope_scope)QueryScope_stack.Peek()).current.addSubQueryInPredicate(((x != null) ? x.result : default(SqlQuery)), inVar); 
            	        	        	        	        	}


            	        	        	        	        	// AST REWRITE
            	        	        	        	        	// elements:          IN, IN, lhs, selectStatement, lhs, NOT, selectStatement
            	        	        	        	        	// token labels:      
            	        	        	        	        	// rule labels:       retval, lhs
            	        	        	        	        	// token list labels: 
            	        	        	        	        	// rule list labels:  
            	        	        	        	        	// wildcard labels: 
            	        	        	        	        	if ( (state.backtracking==0) ) {
            	        	        	        	        	retval.Tree = root_0;
            	        	        	        	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);
            	        	        	        	        	RewriteRuleSubtreeStream stream_lhs = new RewriteRuleSubtreeStream(adaptor, "rule lhs", lhs!=null ? lhs.Tree : null);

            	        	        	        	        	root_0 = (CommonTree)adaptor.GetNilNode();
            	        	        	        	        	// 590:1: -> {$b.text == null}? ^( IN $lhs selectStatement )
            	        	        	        	        	if (((b != null) ? b.Text : null) == null)
            	        	        	        	        	{
            	        	        	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:590:23: ^( IN $lhs selectStatement )
            	        	        	        	        	    {
            	        	        	        	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	        	        	        	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_IN.NextNode(), root_1);

            	        	        	        	        	    adaptor.AddChild(root_1, stream_lhs.NextTree());
            	        	        	        	        	    adaptor.AddChild(root_1, stream_selectStatement.NextTree());

            	        	        	        	        	    adaptor.AddChild(root_0, root_1);
            	        	        	        	        	    }

            	        	        	        	        	}
            	        	        	        	        	else // 591:13: -> ^( NOT ^( IN $lhs selectStatement ) )
            	        	        	        	        	{
            	        	        	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:591:16: ^( NOT ^( IN $lhs selectStatement ) )
            	        	        	        	        	    {
            	        	        	        	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	        	        	        	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_NOT.NextNode(), root_1);

            	        	        	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:591:22: ^( IN $lhs selectStatement )
            	        	        	        	        	    {
            	        	        	        	        	    CommonTree root_2 = (CommonTree)adaptor.GetNilNode();
            	        	        	        	        	    root_2 = (CommonTree)adaptor.BecomeRoot(stream_IN.NextNode(), root_2);

            	        	        	        	        	    adaptor.AddChild(root_2, stream_lhs.NextTree());
            	        	        	        	        	    adaptor.AddChild(root_2, stream_selectStatement.NextTree());

            	        	        	        	        	    adaptor.AddChild(root_1, root_2);
            	        	        	        	        	    }

            	        	        	        	        	    adaptor.AddChild(root_0, root_1);
            	        	        	        	        	    }

            	        	        	        	        	}

            	        	        	        	        	retval.Tree = root_0;retval.Tree = root_0;}
            	        	        	        	        }
            	        	        	        	        break;
            	        	        	        	    case 2 :
            	        	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:592:17: re2+= expression ( COMMA re2+= expression )*
            	        	        	        	        {
            	        	        	        	        	PushFollow(FOLLOW_expression_in_predicate5025);
            	        	        	        	        	re2 = expression();
            	        	        	        	        	state.followingStackPointer--;
            	        	        	        	        	if (state.failed) return retval;
            	        	        	        	        	if ( (state.backtracking==0) ) stream_expression.Add(re2.Tree);
            	        	        	        	        	if (list_re2 == null) list_re2 = new ArrayList();
            	        	        	        	        	list_re2.Add(re2.Tree);

            	        	        	        	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:592:33: ( COMMA re2+= expression )*
            	        	        	        	        	do 
            	        	        	        	        	{
            	        	        	        	        	    int alt44 = 2;
            	        	        	        	        	    int LA44_0 = input.LA(1);

            	        	        	        	        	    if ( (LA44_0 == COMMA) )
            	        	        	        	        	    {
            	        	        	        	        	        alt44 = 1;
            	        	        	        	        	    }


            	        	        	        	        	    switch (alt44) 
            	        	        	        	        		{
            	        	        	        	        			case 1 :
            	        	        	        	        			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:592:34: COMMA re2+= expression
            	        	        	        	        			    {
            	        	        	        	        			    	COMMA127=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_predicate5028); if (state.failed) return retval; 
            	        	        	        	        			    	if ( (state.backtracking==0) ) stream_COMMA.Add(COMMA127);

            	        	        	        	        			    	PushFollow(FOLLOW_expression_in_predicate5032);
            	        	        	        	        			    	re2 = expression();
            	        	        	        	        			    	state.followingStackPointer--;
            	        	        	        	        			    	if (state.failed) return retval;
            	        	        	        	        			    	if ( (state.backtracking==0) ) stream_expression.Add(re2.Tree);
            	        	        	        	        			    	if (list_re2 == null) list_re2 = new ArrayList();
            	        	        	        	        			    	list_re2.Add(re2.Tree);


            	        	        	        	        			    }
            	        	        	        	        			    break;

            	        	        	        	        			default:
            	        	        	        	        			    goto loop44;
            	        	        	        	        	    }
            	        	        	        	        	} while (true);

            	        	        	        	        	loop44:
            	        	        	        	        		;	// Stops C# compiler whining that label 'loop44' has no statements



            	        	        	        	        	// AST REWRITE
            	        	        	        	        	// elements:          lhs, re2, NOT, lhs, re2, IN, IN
            	        	        	        	        	// token labels:      
            	        	        	        	        	// rule labels:       retval, lhs
            	        	        	        	        	// token list labels: 
            	        	        	        	        	// rule list labels:  re2
            	        	        	        	        	// wildcard labels: 
            	        	        	        	        	if ( (state.backtracking==0) ) {
            	        	        	        	        	retval.Tree = root_0;
            	        	        	        	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);
            	        	        	        	        	RewriteRuleSubtreeStream stream_lhs = new RewriteRuleSubtreeStream(adaptor, "rule lhs", lhs!=null ? lhs.Tree : null);
            	        	        	        	        	RewriteRuleSubtreeStream stream_re2 = new RewriteRuleSubtreeStream(adaptor, "token re2", list_re2);
            	        	        	        	        	root_0 = (CommonTree)adaptor.GetNilNode();
            	        	        	        	        	// 593:1: -> {$b.text == null}? ^( IN $lhs ^( ARRAY ( $re2)+ ) )
            	        	        	        	        	if (((b != null) ? b.Text : null) == null)
            	        	        	        	        	{
            	        	        	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:593:23: ^( IN $lhs ^( ARRAY ( $re2)+ ) )
            	        	        	        	        	    {
            	        	        	        	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	        	        	        	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_IN.NextNode(), root_1);

            	        	        	        	        	    adaptor.AddChild(root_1, stream_lhs.NextTree());
            	        	        	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:593:33: ^( ARRAY ( $re2)+ )
            	        	        	        	        	    {
            	        	        	        	        	    CommonTree root_2 = (CommonTree)adaptor.GetNilNode();
            	        	        	        	        	    root_2 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(ARRAY, "ARRAY"), root_2);

            	        	        	        	        	    if ( !(stream_re2.HasNext()) ) {
            	        	        	        	        	        throw new RewriteEarlyExitException();
            	        	        	        	        	    }
            	        	        	        	        	    while ( stream_re2.HasNext() )
            	        	        	        	        	    {
            	        	        	        	        	        adaptor.AddChild(root_2, stream_re2.NextTree());

            	        	        	        	        	    }
            	        	        	        	        	    stream_re2.Reset();

            	        	        	        	        	    adaptor.AddChild(root_1, root_2);
            	        	        	        	        	    }

            	        	        	        	        	    adaptor.AddChild(root_0, root_1);
            	        	        	        	        	    }

            	        	        	        	        	}
            	        	        	        	        	else // 594:13: -> ^( NOT ^( IN $lhs ^( ARRAY ( $re2)+ ) ) )
            	        	        	        	        	{
            	        	        	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:594:16: ^( NOT ^( IN $lhs ^( ARRAY ( $re2)+ ) ) )
            	        	        	        	        	    {
            	        	        	        	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	        	        	        	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_NOT.NextNode(), root_1);

            	        	        	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:594:22: ^( IN $lhs ^( ARRAY ( $re2)+ ) )
            	        	        	        	        	    {
            	        	        	        	        	    CommonTree root_2 = (CommonTree)adaptor.GetNilNode();
            	        	        	        	        	    root_2 = (CommonTree)adaptor.BecomeRoot(stream_IN.NextNode(), root_2);

            	        	        	        	        	    adaptor.AddChild(root_2, stream_lhs.NextTree());
            	        	        	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:594:32: ^( ARRAY ( $re2)+ )
            	        	        	        	        	    {
            	        	        	        	        	    CommonTree root_3 = (CommonTree)adaptor.GetNilNode();
            	        	        	        	        	    root_3 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(ARRAY, "ARRAY"), root_3);

            	        	        	        	        	    if ( !(stream_re2.HasNext()) ) {
            	        	        	        	        	        throw new RewriteEarlyExitException();
            	        	        	        	        	    }
            	        	        	        	        	    while ( stream_re2.HasNext() )
            	        	        	        	        	    {
            	        	        	        	        	        adaptor.AddChild(root_3, stream_re2.NextTree());

            	        	        	        	        	    }
            	        	        	        	        	    stream_re2.Reset();

            	        	        	        	        	    adaptor.AddChild(root_2, root_3);
            	        	        	        	        	    }

            	        	        	        	        	    adaptor.AddChild(root_1, root_2);
            	        	        	        	        	    }

            	        	        	        	        	    adaptor.AddChild(root_0, root_1);
            	        	        	        	        	    }

            	        	        	        	        	}

            	        	        	        	        	retval.Tree = root_0;retval.Tree = root_0;}
            	        	        	        	        }
            	        	        	        	        break;

            	        	        	        	}

            	        	        	        	RPAREN128=(IToken)Match(input,RPAREN,FOLLOW_RPAREN_in_predicate5104); if (state.failed) return retval; 
            	        	        	        	if ( (state.backtracking==0) ) stream_RPAREN.Add(RPAREN128);


            	        	        	        }
            	        	        	        break;

            	        	        	}


            	        	        }
            	        	        break;
            	        	    case 4 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:597:9: CONTAINS LPAREN ( dbObject | STAR ) COMMA ( stringLiteral | Variable ) RPAREN
            	        	        {
            	        	        	CONTAINS129=(IToken)Match(input,CONTAINS,FOLLOW_CONTAINS_in_predicate5126); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_CONTAINS.Add(CONTAINS129);

            	        	        	LPAREN130=(IToken)Match(input,LPAREN,FOLLOW_LPAREN_in_predicate5128); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_LPAREN.Add(LPAREN130);

            	        	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:597:25: ( dbObject | STAR )
            	        	        	int alt47 = 2;
            	        	        	int LA47_0 = input.LA(1);

            	        	        	if ( (LA47_0 == AUTO || LA47_0 == BASE64 || LA47_0 == BINARY || LA47_0 == CAST || LA47_0 == CONCAT || LA47_0 == CUBE || LA47_0 == ELEMENTS || (LA47_0 >= EXPAND && LA47_0 <= FASTFIRSTROW) || LA47_0 == FORCE || LA47_0 == HASH || LA47_0 == IDENTITYCOL || (LA47_0 >= KEEP && LA47_0 <= KEEPFIXED) || (LA47_0 >= LOOP && LA47_0 <= MERGE) || LA47_0 == NOLOCK || LA47_0 == PAGLOCK || LA47_0 == RAW || (LA47_0 >= READCOMMITED && LA47_0 <= READPAST) || LA47_0 == READUNCOMMITED || (LA47_0 >= REMOTE && LA47_0 <= REPEATABLEREAD) || LA47_0 == ROBUST || LA47_0 == ROLLUP || (LA47_0 >= ROWGUIDCOL && LA47_0 <= ROWLOCK) || LA47_0 == SERIALIZABLE || (LA47_0 >= TABLOCK && LA47_0 <= TABLOCKX) || LA47_0 == TIES || LA47_0 == UPDLOCK || LA47_0 == VIEWS || (LA47_0 >= XLOCK && LA47_0 <= XMLDATA) || (LA47_0 >= NonQuotedIdentifier && LA47_0 <= QuotedIdentifier)) )
            	        	        	{
            	        	        	    alt47 = 1;
            	        	        	}
            	        	        	else if ( (LA47_0 == STAR) )
            	        	        	{
            	        	        	    alt47 = 2;
            	        	        	}
            	        	        	else 
            	        	        	{
            	        	        	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	        	        	    NoViableAltException nvae_d47s0 =
            	        	        	        new NoViableAltException("", 47, 0, input);

            	        	        	    throw nvae_d47s0;
            	        	        	}
            	        	        	switch (alt47) 
            	        	        	{
            	        	        	    case 1 :
            	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:597:26: dbObject
            	        	        	        {
            	        	        	        	PushFollow(FOLLOW_dbObject_in_predicate5131);
            	        	        	        	dbObject131 = dbObject();
            	        	        	        	state.followingStackPointer--;
            	        	        	        	if (state.failed) return retval;
            	        	        	        	if ( (state.backtracking==0) ) stream_dbObject.Add(dbObject131.Tree);

            	        	        	        }
            	        	        	        break;
            	        	        	    case 2 :
            	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:597:37: STAR
            	        	        	        {
            	        	        	        	STAR132=(IToken)Match(input,STAR,FOLLOW_STAR_in_predicate5135); if (state.failed) return retval; 
            	        	        	        	if ( (state.backtracking==0) ) stream_STAR.Add(STAR132);


            	        	        	        }
            	        	        	        break;

            	        	        	}

            	        	        	COMMA133=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_predicate5138); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_COMMA.Add(COMMA133);

            	        	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:597:49: ( stringLiteral | Variable )
            	        	        	int alt48 = 2;
            	        	        	int LA48_0 = input.LA(1);

            	        	        	if ( ((LA48_0 >= UnicodeStringLiteral && LA48_0 <= ASCIIStringLiteral)) )
            	        	        	{
            	        	        	    alt48 = 1;
            	        	        	}
            	        	        	else if ( (LA48_0 == Variable) )
            	        	        	{
            	        	        	    alt48 = 2;
            	        	        	}
            	        	        	else 
            	        	        	{
            	        	        	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	        	        	    NoViableAltException nvae_d48s0 =
            	        	        	        new NoViableAltException("", 48, 0, input);

            	        	        	    throw nvae_d48s0;
            	        	        	}
            	        	        	switch (alt48) 
            	        	        	{
            	        	        	    case 1 :
            	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:597:50: stringLiteral
            	        	        	        {
            	        	        	        	PushFollow(FOLLOW_stringLiteral_in_predicate5141);
            	        	        	        	stringLiteral134 = stringLiteral();
            	        	        	        	state.followingStackPointer--;
            	        	        	        	if (state.failed) return retval;
            	        	        	        	if ( (state.backtracking==0) ) stream_stringLiteral.Add(stringLiteral134.Tree);

            	        	        	        }
            	        	        	        break;
            	        	        	    case 2 :
            	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:597:66: Variable
            	        	        	        {
            	        	        	        	Variable135=(IToken)Match(input,Variable,FOLLOW_Variable_in_predicate5145); if (state.failed) return retval; 
            	        	        	        	if ( (state.backtracking==0) ) stream_Variable.Add(Variable135);


            	        	        	        }
            	        	        	        break;

            	        	        	}

            	        	        	RPAREN136=(IToken)Match(input,RPAREN,FOLLOW_RPAREN_in_predicate5148); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_RPAREN.Add(RPAREN136);


            	        	        }
            	        	        break;
            	        	    case 5 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:598:9: FREETEXT LPAREN ( dbObject | STAR ) COMMA ( stringLiteral | Variable ) RPAREN
            	        	        {
            	        	        	FREETEXT137=(IToken)Match(input,FREETEXT,FOLLOW_FREETEXT_in_predicate5158); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_FREETEXT.Add(FREETEXT137);

            	        	        	LPAREN138=(IToken)Match(input,LPAREN,FOLLOW_LPAREN_in_predicate5160); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_LPAREN.Add(LPAREN138);

            	        	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:598:25: ( dbObject | STAR )
            	        	        	int alt49 = 2;
            	        	        	int LA49_0 = input.LA(1);

            	        	        	if ( (LA49_0 == AUTO || LA49_0 == BASE64 || LA49_0 == BINARY || LA49_0 == CAST || LA49_0 == CONCAT || LA49_0 == CUBE || LA49_0 == ELEMENTS || (LA49_0 >= EXPAND && LA49_0 <= FASTFIRSTROW) || LA49_0 == FORCE || LA49_0 == HASH || LA49_0 == IDENTITYCOL || (LA49_0 >= KEEP && LA49_0 <= KEEPFIXED) || (LA49_0 >= LOOP && LA49_0 <= MERGE) || LA49_0 == NOLOCK || LA49_0 == PAGLOCK || LA49_0 == RAW || (LA49_0 >= READCOMMITED && LA49_0 <= READPAST) || LA49_0 == READUNCOMMITED || (LA49_0 >= REMOTE && LA49_0 <= REPEATABLEREAD) || LA49_0 == ROBUST || LA49_0 == ROLLUP || (LA49_0 >= ROWGUIDCOL && LA49_0 <= ROWLOCK) || LA49_0 == SERIALIZABLE || (LA49_0 >= TABLOCK && LA49_0 <= TABLOCKX) || LA49_0 == TIES || LA49_0 == UPDLOCK || LA49_0 == VIEWS || (LA49_0 >= XLOCK && LA49_0 <= XMLDATA) || (LA49_0 >= NonQuotedIdentifier && LA49_0 <= QuotedIdentifier)) )
            	        	        	{
            	        	        	    alt49 = 1;
            	        	        	}
            	        	        	else if ( (LA49_0 == STAR) )
            	        	        	{
            	        	        	    alt49 = 2;
            	        	        	}
            	        	        	else 
            	        	        	{
            	        	        	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	        	        	    NoViableAltException nvae_d49s0 =
            	        	        	        new NoViableAltException("", 49, 0, input);

            	        	        	    throw nvae_d49s0;
            	        	        	}
            	        	        	switch (alt49) 
            	        	        	{
            	        	        	    case 1 :
            	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:598:26: dbObject
            	        	        	        {
            	        	        	        	PushFollow(FOLLOW_dbObject_in_predicate5163);
            	        	        	        	dbObject139 = dbObject();
            	        	        	        	state.followingStackPointer--;
            	        	        	        	if (state.failed) return retval;
            	        	        	        	if ( (state.backtracking==0) ) stream_dbObject.Add(dbObject139.Tree);

            	        	        	        }
            	        	        	        break;
            	        	        	    case 2 :
            	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:598:37: STAR
            	        	        	        {
            	        	        	        	STAR140=(IToken)Match(input,STAR,FOLLOW_STAR_in_predicate5167); if (state.failed) return retval; 
            	        	        	        	if ( (state.backtracking==0) ) stream_STAR.Add(STAR140);


            	        	        	        }
            	        	        	        break;

            	        	        	}

            	        	        	COMMA141=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_predicate5170); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_COMMA.Add(COMMA141);

            	        	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:598:49: ( stringLiteral | Variable )
            	        	        	int alt50 = 2;
            	        	        	int LA50_0 = input.LA(1);

            	        	        	if ( ((LA50_0 >= UnicodeStringLiteral && LA50_0 <= ASCIIStringLiteral)) )
            	        	        	{
            	        	        	    alt50 = 1;
            	        	        	}
            	        	        	else if ( (LA50_0 == Variable) )
            	        	        	{
            	        	        	    alt50 = 2;
            	        	        	}
            	        	        	else 
            	        	        	{
            	        	        	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	        	        	    NoViableAltException nvae_d50s0 =
            	        	        	        new NoViableAltException("", 50, 0, input);

            	        	        	    throw nvae_d50s0;
            	        	        	}
            	        	        	switch (alt50) 
            	        	        	{
            	        	        	    case 1 :
            	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:598:50: stringLiteral
            	        	        	        {
            	        	        	        	PushFollow(FOLLOW_stringLiteral_in_predicate5173);
            	        	        	        	stringLiteral142 = stringLiteral();
            	        	        	        	state.followingStackPointer--;
            	        	        	        	if (state.failed) return retval;
            	        	        	        	if ( (state.backtracking==0) ) stream_stringLiteral.Add(stringLiteral142.Tree);

            	        	        	        }
            	        	        	        break;
            	        	        	    case 2 :
            	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:598:66: Variable
            	        	        	        {
            	        	        	        	Variable143=(IToken)Match(input,Variable,FOLLOW_Variable_in_predicate5177); if (state.failed) return retval; 
            	        	        	        	if ( (state.backtracking==0) ) stream_Variable.Add(Variable143);


            	        	        	        }
            	        	        	        break;

            	        	        	}

            	        	        	RPAREN144=(IToken)Match(input,RPAREN,FOLLOW_RPAREN_in_predicate5180); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_RPAREN.Add(RPAREN144);


            	        	        }
            	        	        break;

            	        	}


            	        }
            	        break;
            	    case 2 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:600:7: existsVar= EXISTS LPAREN y= selectStatement RPAREN
            	        {
            	        	existsVar=(IToken)Match(input,EXISTS,FOLLOW_EXISTS_in_predicate5198); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_EXISTS.Add(existsVar);

            	        	LPAREN145=(IToken)Match(input,LPAREN,FOLLOW_LPAREN_in_predicate5200); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_LPAREN.Add(LPAREN145);

            	        	PushFollow(FOLLOW_selectStatement_in_predicate5204);
            	        	y = selectStatement();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_selectStatement.Add(y.Tree);
            	        	RPAREN146=(IToken)Match(input,RPAREN,FOLLOW_RPAREN_in_predicate5206); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_RPAREN.Add(RPAREN146);

            	        	if ( (state.backtracking==0) )
            	        	{
            	        	   ((QueryScope_scope)QueryScope_stack.Peek()).current.addSubQueryInPredicate(((y != null) ? y.result : default(SqlQuery)), existsVar); 
            	        	}


            	        	// AST REWRITE
            	        	// elements:          selectStatement, EXISTS
            	        	// token labels:      
            	        	// rule labels:       retval
            	        	// token list labels: 
            	        	// rule list labels:  
            	        	// wildcard labels: 
            	        	if ( (state.backtracking==0) ) {
            	        	retval.Tree = root_0;
            	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	        	root_0 = (CommonTree)adaptor.GetNilNode();
            	        	// 602:5: -> ^( EXISTS selectStatement )
            	        	{
            	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:602:8: ^( EXISTS selectStatement )
            	        	    {
            	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_EXISTS.NextNode(), root_1);

            	        	    adaptor.AddChild(root_1, stream_selectStatement.NextTree());

            	        	    adaptor.AddChild(root_0, root_1);
            	        	    }

            	        	}

            	        	retval.Tree = root_0;retval.Tree = root_0;}
            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 22, predicate_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "predicate"

    public class selectItem_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "selectItem"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:610:1: selectItem : ( STAR | ( ( alias2 )=> ( ( alias2 dbObject COMMA )=> alias2 column -> ^( SELECTITEM column alias2 ) | ( alias2 dbObject ( binaryOperator | LPAREN ) )=> alias2 expression -> ^( SELECTITEM expression alias2 ) | ( alias2 column )=> alias2 column -> ^( SELECTITEM column alias2 ) | ( alias2 expression )=> alias2 expression -> ^( SELECTITEM expression alias2 ) ) | ( tableColumns )=> tableColumns -> ^( SELECTITEM tableColumns ) | ( dbObject ( alias1 )? COMMA )=> column ( alias1 )? -> ^( SELECTITEM column ( alias1 )? ) | ( dbObject ( binaryOperator | LPAREN ) )=> expression ( alias1 )? -> ^( SELECTITEM expression ( alias1 )? ) | ( column )=> column ( alias1 )? -> ^( SELECTITEM column ( alias1 )? ) | ( expression )=> expression ( alias1 )? -> ^( SELECTITEM expression ( alias1 )? ) ) );
    public SqlParser.selectItem_return selectItem() // throws RecognitionException [1]
    {   
        SqlParser.selectItem_return retval = new SqlParser.selectItem_return();
        retval.Start = input.LT(1);
        int selectItem_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken STAR147 = null;
        SqlParser.alias2_return alias2148 = default(SqlParser.alias2_return);

        SqlParser.column_return column149 = default(SqlParser.column_return);

        SqlParser.alias2_return alias2150 = default(SqlParser.alias2_return);

        SqlParser.expression_return expression151 = default(SqlParser.expression_return);

        SqlParser.alias2_return alias2152 = default(SqlParser.alias2_return);

        SqlParser.column_return column153 = default(SqlParser.column_return);

        SqlParser.alias2_return alias2154 = default(SqlParser.alias2_return);

        SqlParser.expression_return expression155 = default(SqlParser.expression_return);

        SqlParser.tableColumns_return tableColumns156 = default(SqlParser.tableColumns_return);

        SqlParser.column_return column157 = default(SqlParser.column_return);

        SqlParser.alias1_return alias1158 = default(SqlParser.alias1_return);

        SqlParser.expression_return expression159 = default(SqlParser.expression_return);

        SqlParser.alias1_return alias1160 = default(SqlParser.alias1_return);

        SqlParser.column_return column161 = default(SqlParser.column_return);

        SqlParser.alias1_return alias1162 = default(SqlParser.alias1_return);

        SqlParser.expression_return expression163 = default(SqlParser.expression_return);

        SqlParser.alias1_return alias1164 = default(SqlParser.alias1_return);


        CommonTree STAR147_tree=null;
        RewriteRuleSubtreeStream stream_alias2 = new RewriteRuleSubtreeStream(adaptor,"rule alias2");
        RewriteRuleSubtreeStream stream_expression = new RewriteRuleSubtreeStream(adaptor,"rule expression");
        RewriteRuleSubtreeStream stream_tableColumns = new RewriteRuleSubtreeStream(adaptor,"rule tableColumns");
        RewriteRuleSubtreeStream stream_alias1 = new RewriteRuleSubtreeStream(adaptor,"rule alias1");
        RewriteRuleSubtreeStream stream_column = new RewriteRuleSubtreeStream(adaptor,"rule column");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 23) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:611:5: ( STAR | ( ( alias2 )=> ( ( alias2 dbObject COMMA )=> alias2 column -> ^( SELECTITEM column alias2 ) | ( alias2 dbObject ( binaryOperator | LPAREN ) )=> alias2 expression -> ^( SELECTITEM expression alias2 ) | ( alias2 column )=> alias2 column -> ^( SELECTITEM column alias2 ) | ( alias2 expression )=> alias2 expression -> ^( SELECTITEM expression alias2 ) ) | ( tableColumns )=> tableColumns -> ^( SELECTITEM tableColumns ) | ( dbObject ( alias1 )? COMMA )=> column ( alias1 )? -> ^( SELECTITEM column ( alias1 )? ) | ( dbObject ( binaryOperator | LPAREN ) )=> expression ( alias1 )? -> ^( SELECTITEM expression ( alias1 )? ) | ( column )=> column ( alias1 )? -> ^( SELECTITEM column ( alias1 )? ) | ( expression )=> expression ( alias1 )? -> ^( SELECTITEM expression ( alias1 )? ) ) )
            int alt59 = 2;
            alt59 = dfa59.Predict(input);
            switch (alt59) 
            {
                case 1 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:612:7: STAR
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	STAR147=(IToken)Match(input,STAR,FOLLOW_STAR_in_selectItem5257); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{STAR147_tree = (CommonTree)adaptor.Create(STAR147);
                    		adaptor.AddChild(root_0, STAR147_tree);
                    	}

                    }
                    break;
                case 2 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:613:7: ( ( alias2 )=> ( ( alias2 dbObject COMMA )=> alias2 column -> ^( SELECTITEM column alias2 ) | ( alias2 dbObject ( binaryOperator | LPAREN ) )=> alias2 expression -> ^( SELECTITEM expression alias2 ) | ( alias2 column )=> alias2 column -> ^( SELECTITEM column alias2 ) | ( alias2 expression )=> alias2 expression -> ^( SELECTITEM expression alias2 ) ) | ( tableColumns )=> tableColumns -> ^( SELECTITEM tableColumns ) | ( dbObject ( alias1 )? COMMA )=> column ( alias1 )? -> ^( SELECTITEM column ( alias1 )? ) | ( dbObject ( binaryOperator | LPAREN ) )=> expression ( alias1 )? -> ^( SELECTITEM expression ( alias1 )? ) | ( column )=> column ( alias1 )? -> ^( SELECTITEM column ( alias1 )? ) | ( expression )=> expression ( alias1 )? -> ^( SELECTITEM expression ( alias1 )? ) )
                    {
                    	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:613:7: ( ( alias2 )=> ( ( alias2 dbObject COMMA )=> alias2 column -> ^( SELECTITEM column alias2 ) | ( alias2 dbObject ( binaryOperator | LPAREN ) )=> alias2 expression -> ^( SELECTITEM expression alias2 ) | ( alias2 column )=> alias2 column -> ^( SELECTITEM column alias2 ) | ( alias2 expression )=> alias2 expression -> ^( SELECTITEM expression alias2 ) ) | ( tableColumns )=> tableColumns -> ^( SELECTITEM tableColumns ) | ( dbObject ( alias1 )? COMMA )=> column ( alias1 )? -> ^( SELECTITEM column ( alias1 )? ) | ( dbObject ( binaryOperator | LPAREN ) )=> expression ( alias1 )? -> ^( SELECTITEM expression ( alias1 )? ) | ( column )=> column ( alias1 )? -> ^( SELECTITEM column ( alias1 )? ) | ( expression )=> expression ( alias1 )? -> ^( SELECTITEM expression ( alias1 )? ) )
                    	int alt58 = 6;
                    	alt58 = dfa58.Predict(input);
                    	switch (alt58) 
                    	{
                    	    case 1 :
                    	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:615:7: ( alias2 )=> ( ( alias2 dbObject COMMA )=> alias2 column -> ^( SELECTITEM column alias2 ) | ( alias2 dbObject ( binaryOperator | LPAREN ) )=> alias2 expression -> ^( SELECTITEM expression alias2 ) | ( alias2 column )=> alias2 column -> ^( SELECTITEM column alias2 ) | ( alias2 expression )=> alias2 expression -> ^( SELECTITEM expression alias2 ) )
                    	        {
                    	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:615:19: ( ( alias2 dbObject COMMA )=> alias2 column -> ^( SELECTITEM column alias2 ) | ( alias2 dbObject ( binaryOperator | LPAREN ) )=> alias2 expression -> ^( SELECTITEM expression alias2 ) | ( alias2 column )=> alias2 column -> ^( SELECTITEM column alias2 ) | ( alias2 expression )=> alias2 expression -> ^( SELECTITEM expression alias2 ) )
                    	        	int alt53 = 4;
                    	        	alt53 = dfa53.Predict(input);
                    	        	switch (alt53) 
                    	        	{
                    	        	    case 1 :
                    	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:616:11: ( alias2 dbObject COMMA )=> alias2 column
                    	        	        {
                    	        	        	PushFollow(FOLLOW_alias2_in_selectItem5309);
                    	        	        	alias2148 = alias2();
                    	        	        	state.followingStackPointer--;
                    	        	        	if (state.failed) return retval;
                    	        	        	if ( (state.backtracking==0) ) stream_alias2.Add(alias2148.Tree);
                    	        	        	PushFollow(FOLLOW_column_in_selectItem5311);
                    	        	        	column149 = column();
                    	        	        	state.followingStackPointer--;
                    	        	        	if (state.failed) return retval;
                    	        	        	if ( (state.backtracking==0) ) stream_column.Add(column149.Tree);


                    	        	        	// AST REWRITE
                    	        	        	// elements:          column, alias2
                    	        	        	// token labels:      
                    	        	        	// rule labels:       retval
                    	        	        	// token list labels: 
                    	        	        	// rule list labels:  
                    	        	        	// wildcard labels: 
                    	        	        	if ( (state.backtracking==0) ) {
                    	        	        	retval.Tree = root_0;
                    	        	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	        	        	root_0 = (CommonTree)adaptor.GetNilNode();
                    	        	        	// 617:11: -> ^( SELECTITEM column alias2 )
                    	        	        	{
                    	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:617:14: ^( SELECTITEM column alias2 )
                    	        	        	    {
                    	        	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
                    	        	        	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(SELECTITEM, "SELECTITEM"), root_1);

                    	        	        	    adaptor.AddChild(root_1, stream_column.NextTree());
                    	        	        	    adaptor.AddChild(root_1, stream_alias2.NextTree());

                    	        	        	    adaptor.AddChild(root_0, root_1);
                    	        	        	    }

                    	        	        	}

                    	        	        	retval.Tree = root_0;retval.Tree = root_0;}
                    	        	        }
                    	        	        break;
                    	        	    case 2 :
                    	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:618:11: ( alias2 dbObject ( binaryOperator | LPAREN ) )=> alias2 expression
                    	        	        {
                    	        	        	PushFollow(FOLLOW_alias2_in_selectItem5359);
                    	        	        	alias2150 = alias2();
                    	        	        	state.followingStackPointer--;
                    	        	        	if (state.failed) return retval;
                    	        	        	if ( (state.backtracking==0) ) stream_alias2.Add(alias2150.Tree);
                    	        	        	PushFollow(FOLLOW_expression_in_selectItem5361);
                    	        	        	expression151 = expression();
                    	        	        	state.followingStackPointer--;
                    	        	        	if (state.failed) return retval;
                    	        	        	if ( (state.backtracking==0) ) stream_expression.Add(expression151.Tree);


                    	        	        	// AST REWRITE
                    	        	        	// elements:          expression, alias2
                    	        	        	// token labels:      
                    	        	        	// rule labels:       retval
                    	        	        	// token list labels: 
                    	        	        	// rule list labels:  
                    	        	        	// wildcard labels: 
                    	        	        	if ( (state.backtracking==0) ) {
                    	        	        	retval.Tree = root_0;
                    	        	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	        	        	root_0 = (CommonTree)adaptor.GetNilNode();
                    	        	        	// 619:11: -> ^( SELECTITEM expression alias2 )
                    	        	        	{
                    	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:619:14: ^( SELECTITEM expression alias2 )
                    	        	        	    {
                    	        	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
                    	        	        	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(SELECTITEM, "SELECTITEM"), root_1);

                    	        	        	    adaptor.AddChild(root_1, stream_expression.NextTree());
                    	        	        	    adaptor.AddChild(root_1, stream_alias2.NextTree());

                    	        	        	    adaptor.AddChild(root_0, root_1);
                    	        	        	    }

                    	        	        	}

                    	        	        	retval.Tree = root_0;retval.Tree = root_0;}
                    	        	        }
                    	        	        break;
                    	        	    case 3 :
                    	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:620:11: ( alias2 column )=> alias2 column
                    	        	        {
                    	        	        	PushFollow(FOLLOW_alias2_in_selectItem5401);
                    	        	        	alias2152 = alias2();
                    	        	        	state.followingStackPointer--;
                    	        	        	if (state.failed) return retval;
                    	        	        	if ( (state.backtracking==0) ) stream_alias2.Add(alias2152.Tree);
                    	        	        	PushFollow(FOLLOW_column_in_selectItem5403);
                    	        	        	column153 = column();
                    	        	        	state.followingStackPointer--;
                    	        	        	if (state.failed) return retval;
                    	        	        	if ( (state.backtracking==0) ) stream_column.Add(column153.Tree);


                    	        	        	// AST REWRITE
                    	        	        	// elements:          column, alias2
                    	        	        	// token labels:      
                    	        	        	// rule labels:       retval
                    	        	        	// token list labels: 
                    	        	        	// rule list labels:  
                    	        	        	// wildcard labels: 
                    	        	        	if ( (state.backtracking==0) ) {
                    	        	        	retval.Tree = root_0;
                    	        	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	        	        	root_0 = (CommonTree)adaptor.GetNilNode();
                    	        	        	// 621:11: -> ^( SELECTITEM column alias2 )
                    	        	        	{
                    	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:621:14: ^( SELECTITEM column alias2 )
                    	        	        	    {
                    	        	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
                    	        	        	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(SELECTITEM, "SELECTITEM"), root_1);

                    	        	        	    adaptor.AddChild(root_1, stream_column.NextTree());
                    	        	        	    adaptor.AddChild(root_1, stream_alias2.NextTree());

                    	        	        	    adaptor.AddChild(root_0, root_1);
                    	        	        	    }

                    	        	        	}

                    	        	        	retval.Tree = root_0;retval.Tree = root_0;}
                    	        	        }
                    	        	        break;
                    	        	    case 4 :
                    	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:622:11: ( alias2 expression )=> alias2 expression
                    	        	        {
                    	        	        	PushFollow(FOLLOW_alias2_in_selectItem5443);
                    	        	        	alias2154 = alias2();
                    	        	        	state.followingStackPointer--;
                    	        	        	if (state.failed) return retval;
                    	        	        	if ( (state.backtracking==0) ) stream_alias2.Add(alias2154.Tree);
                    	        	        	PushFollow(FOLLOW_expression_in_selectItem5445);
                    	        	        	expression155 = expression();
                    	        	        	state.followingStackPointer--;
                    	        	        	if (state.failed) return retval;
                    	        	        	if ( (state.backtracking==0) ) stream_expression.Add(expression155.Tree);


                    	        	        	// AST REWRITE
                    	        	        	// elements:          expression, alias2
                    	        	        	// token labels:      
                    	        	        	// rule labels:       retval
                    	        	        	// token list labels: 
                    	        	        	// rule list labels:  
                    	        	        	// wildcard labels: 
                    	        	        	if ( (state.backtracking==0) ) {
                    	        	        	retval.Tree = root_0;
                    	        	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	        	        	root_0 = (CommonTree)adaptor.GetNilNode();
                    	        	        	// 623:11: -> ^( SELECTITEM expression alias2 )
                    	        	        	{
                    	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:623:14: ^( SELECTITEM expression alias2 )
                    	        	        	    {
                    	        	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
                    	        	        	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(SELECTITEM, "SELECTITEM"), root_1);

                    	        	        	    adaptor.AddChild(root_1, stream_expression.NextTree());
                    	        	        	    adaptor.AddChild(root_1, stream_alias2.NextTree());

                    	        	        	    adaptor.AddChild(root_0, root_1);
                    	        	        	    }

                    	        	        	}

                    	        	        	retval.Tree = root_0;retval.Tree = root_0;}
                    	        	        }
                    	        	        break;

                    	        	}


                    	        }
                    	        break;
                    	    case 2 :
                    	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:627:7: ( tableColumns )=> tableColumns
                    	        {
                    	        	PushFollow(FOLLOW_tableColumns_in_selectItem5497);
                    	        	tableColumns156 = tableColumns();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( (state.backtracking==0) ) stream_tableColumns.Add(tableColumns156.Tree);


                    	        	// AST REWRITE
                    	        	// elements:          tableColumns
                    	        	// token labels:      
                    	        	// rule labels:       retval
                    	        	// token list labels: 
                    	        	// rule list labels:  
                    	        	// wildcard labels: 
                    	        	if ( (state.backtracking==0) ) {
                    	        	retval.Tree = root_0;
                    	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	        	root_0 = (CommonTree)adaptor.GetNilNode();
                    	        	// 628:5: -> ^( SELECTITEM tableColumns )
                    	        	{
                    	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:628:8: ^( SELECTITEM tableColumns )
                    	        	    {
                    	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
                    	        	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(SELECTITEM, "SELECTITEM"), root_1);

                    	        	    adaptor.AddChild(root_1, stream_tableColumns.NextTree());

                    	        	    adaptor.AddChild(root_0, root_1);
                    	        	    }

                    	        	}

                    	        	retval.Tree = root_0;retval.Tree = root_0;}
                    	        }
                    	        break;
                    	    case 3 :
                    	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:631:7: ( dbObject ( alias1 )? COMMA )=> column ( alias1 )?
                    	        {
                    	        	PushFollow(FOLLOW_column_in_selectItem5542);
                    	        	column157 = column();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( (state.backtracking==0) ) stream_column.Add(column157.Tree);
                    	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:631:44: ( alias1 )?
                    	        	int alt54 = 2;
                    	        	alt54 = dfa54.Predict(input);
                    	        	switch (alt54) 
                    	        	{
                    	        	    case 1 :
                    	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:631:45: alias1
                    	        	        {
                    	        	        	PushFollow(FOLLOW_alias1_in_selectItem5545);
                    	        	        	alias1158 = alias1();
                    	        	        	state.followingStackPointer--;
                    	        	        	if (state.failed) return retval;
                    	        	        	if ( (state.backtracking==0) ) stream_alias1.Add(alias1158.Tree);

                    	        	        }
                    	        	        break;

                    	        	}



                    	        	// AST REWRITE
                    	        	// elements:          column, alias1
                    	        	// token labels:      
                    	        	// rule labels:       retval
                    	        	// token list labels: 
                    	        	// rule list labels:  
                    	        	// wildcard labels: 
                    	        	if ( (state.backtracking==0) ) {
                    	        	retval.Tree = root_0;
                    	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	        	root_0 = (CommonTree)adaptor.GetNilNode();
                    	        	// 632:5: -> ^( SELECTITEM column ( alias1 )? )
                    	        	{
                    	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:632:8: ^( SELECTITEM column ( alias1 )? )
                    	        	    {
                    	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
                    	        	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(SELECTITEM, "SELECTITEM"), root_1);

                    	        	    adaptor.AddChild(root_1, stream_column.NextTree());
                    	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:632:28: ( alias1 )?
                    	        	    if ( stream_alias1.HasNext() )
                    	        	    {
                    	        	        adaptor.AddChild(root_1, stream_alias1.NextTree());

                    	        	    }
                    	        	    stream_alias1.Reset();

                    	        	    adaptor.AddChild(root_0, root_1);
                    	        	    }

                    	        	}

                    	        	retval.Tree = root_0;retval.Tree = root_0;}
                    	        }
                    	        break;
                    	    case 4 :
                    	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:633:7: ( dbObject ( binaryOperator | LPAREN ) )=> expression ( alias1 )?
                    	        {
                    	        	PushFollow(FOLLOW_expression_in_selectItem5585);
                    	        	expression159 = expression();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( (state.backtracking==0) ) stream_expression.Add(expression159.Tree);
                    	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:633:59: ( alias1 )?
                    	        	int alt55 = 2;
                    	        	alt55 = dfa55.Predict(input);
                    	        	switch (alt55) 
                    	        	{
                    	        	    case 1 :
                    	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:633:60: alias1
                    	        	        {
                    	        	        	PushFollow(FOLLOW_alias1_in_selectItem5588);
                    	        	        	alias1160 = alias1();
                    	        	        	state.followingStackPointer--;
                    	        	        	if (state.failed) return retval;
                    	        	        	if ( (state.backtracking==0) ) stream_alias1.Add(alias1160.Tree);

                    	        	        }
                    	        	        break;

                    	        	}



                    	        	// AST REWRITE
                    	        	// elements:          alias1, expression
                    	        	// token labels:      
                    	        	// rule labels:       retval
                    	        	// token list labels: 
                    	        	// rule list labels:  
                    	        	// wildcard labels: 
                    	        	if ( (state.backtracking==0) ) {
                    	        	retval.Tree = root_0;
                    	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	        	root_0 = (CommonTree)adaptor.GetNilNode();
                    	        	// 634:5: -> ^( SELECTITEM expression ( alias1 )? )
                    	        	{
                    	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:634:8: ^( SELECTITEM expression ( alias1 )? )
                    	        	    {
                    	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
                    	        	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(SELECTITEM, "SELECTITEM"), root_1);

                    	        	    adaptor.AddChild(root_1, stream_expression.NextTree());
                    	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:634:32: ( alias1 )?
                    	        	    if ( stream_alias1.HasNext() )
                    	        	    {
                    	        	        adaptor.AddChild(root_1, stream_alias1.NextTree());

                    	        	    }
                    	        	    stream_alias1.Reset();

                    	        	    adaptor.AddChild(root_0, root_1);
                    	        	    }

                    	        	}

                    	        	retval.Tree = root_0;retval.Tree = root_0;}
                    	        }
                    	        break;
                    	    case 5 :
                    	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:637:7: ( column )=> column ( alias1 )?
                    	        {
                    	        	PushFollow(FOLLOW_column_in_selectItem5631);
                    	        	column161 = column();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( (state.backtracking==0) ) stream_column.Add(column161.Tree);
                    	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:637:26: ( alias1 )?
                    	        	int alt56 = 2;
                    	        	alt56 = dfa56.Predict(input);
                    	        	switch (alt56) 
                    	        	{
                    	        	    case 1 :
                    	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:637:27: alias1
                    	        	        {
                    	        	        	PushFollow(FOLLOW_alias1_in_selectItem5634);
                    	        	        	alias1162 = alias1();
                    	        	        	state.followingStackPointer--;
                    	        	        	if (state.failed) return retval;
                    	        	        	if ( (state.backtracking==0) ) stream_alias1.Add(alias1162.Tree);

                    	        	        }
                    	        	        break;

                    	        	}



                    	        	// AST REWRITE
                    	        	// elements:          alias1, column
                    	        	// token labels:      
                    	        	// rule labels:       retval
                    	        	// token list labels: 
                    	        	// rule list labels:  
                    	        	// wildcard labels: 
                    	        	if ( (state.backtracking==0) ) {
                    	        	retval.Tree = root_0;
                    	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	        	root_0 = (CommonTree)adaptor.GetNilNode();
                    	        	// 638:5: -> ^( SELECTITEM column ( alias1 )? )
                    	        	{
                    	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:638:8: ^( SELECTITEM column ( alias1 )? )
                    	        	    {
                    	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
                    	        	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(SELECTITEM, "SELECTITEM"), root_1);

                    	        	    adaptor.AddChild(root_1, stream_column.NextTree());
                    	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:638:28: ( alias1 )?
                    	        	    if ( stream_alias1.HasNext() )
                    	        	    {
                    	        	        adaptor.AddChild(root_1, stream_alias1.NextTree());

                    	        	    }
                    	        	    stream_alias1.Reset();

                    	        	    adaptor.AddChild(root_0, root_1);
                    	        	    }

                    	        	}

                    	        	retval.Tree = root_0;retval.Tree = root_0;}
                    	        }
                    	        break;
                    	    case 6 :
                    	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:639:7: ( expression )=> expression ( alias1 )?
                    	        {
                    	        	PushFollow(FOLLOW_expression_in_selectItem5665);
                    	        	expression163 = expression();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( (state.backtracking==0) ) stream_expression.Add(expression163.Tree);
                    	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:639:34: ( alias1 )?
                    	        	int alt57 = 2;
                    	        	alt57 = dfa57.Predict(input);
                    	        	switch (alt57) 
                    	        	{
                    	        	    case 1 :
                    	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:639:35: alias1
                    	        	        {
                    	        	        	PushFollow(FOLLOW_alias1_in_selectItem5668);
                    	        	        	alias1164 = alias1();
                    	        	        	state.followingStackPointer--;
                    	        	        	if (state.failed) return retval;
                    	        	        	if ( (state.backtracking==0) ) stream_alias1.Add(alias1164.Tree);

                    	        	        }
                    	        	        break;

                    	        	}



                    	        	// AST REWRITE
                    	        	// elements:          alias1, expression
                    	        	// token labels:      
                    	        	// rule labels:       retval
                    	        	// token list labels: 
                    	        	// rule list labels:  
                    	        	// wildcard labels: 
                    	        	if ( (state.backtracking==0) ) {
                    	        	retval.Tree = root_0;
                    	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	        	root_0 = (CommonTree)adaptor.GetNilNode();
                    	        	// 640:5: -> ^( SELECTITEM expression ( alias1 )? )
                    	        	{
                    	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:640:8: ^( SELECTITEM expression ( alias1 )? )
                    	        	    {
                    	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
                    	        	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(SELECTITEM, "SELECTITEM"), root_1);

                    	        	    adaptor.AddChild(root_1, stream_expression.NextTree());
                    	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:640:32: ( alias1 )?
                    	        	    if ( stream_alias1.HasNext() )
                    	        	    {
                    	        	        adaptor.AddChild(root_1, stream_alias1.NextTree());

                    	        	    }
                    	        	    stream_alias1.Reset();

                    	        	    adaptor.AddChild(root_0, root_1);
                    	        	    }

                    	        	}

                    	        	retval.Tree = root_0;retval.Tree = root_0;}
                    	        }
                    	        break;

                    	}


                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 23, selectItem_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "selectItem"

    public class fromClause_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "fromClause"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:644:1: fromClause : FROM tableSource ( COMMA tableSource )* -> ^( FROM ( tableSource )+ ) ;
    public SqlParser.fromClause_return fromClause() // throws RecognitionException [1]
    {   
        SqlParser.fromClause_return retval = new SqlParser.fromClause_return();
        retval.Start = input.LT(1);
        int fromClause_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken FROM165 = null;
        IToken COMMA167 = null;
        SqlParser.tableSource_return tableSource166 = default(SqlParser.tableSource_return);

        SqlParser.tableSource_return tableSource168 = default(SqlParser.tableSource_return);


        CommonTree FROM165_tree=null;
        CommonTree COMMA167_tree=null;
        RewriteRuleTokenStream stream_FROM = new RewriteRuleTokenStream(adaptor,"token FROM");
        RewriteRuleTokenStream stream_COMMA = new RewriteRuleTokenStream(adaptor,"token COMMA");
        RewriteRuleSubtreeStream stream_tableSource = new RewriteRuleSubtreeStream(adaptor,"rule tableSource");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 24) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:645:5: ( FROM tableSource ( COMMA tableSource )* -> ^( FROM ( tableSource )+ ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:645:7: FROM tableSource ( COMMA tableSource )*
            {
            	FROM165=(IToken)Match(input,FROM,FOLLOW_FROM_in_fromClause5708); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_FROM.Add(FROM165);

            	PushFollow(FOLLOW_tableSource_in_fromClause5710);
            	tableSource166 = tableSource();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_tableSource.Add(tableSource166.Tree);
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:645:24: ( COMMA tableSource )*
            	do 
            	{
            	    int alt60 = 2;
            	    alt60 = dfa60.Predict(input);
            	    switch (alt60) 
            		{
            			case 1 :
            			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:645:25: COMMA tableSource
            			    {
            			    	COMMA167=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_fromClause5713); if (state.failed) return retval; 
            			    	if ( (state.backtracking==0) ) stream_COMMA.Add(COMMA167);

            			    	PushFollow(FOLLOW_tableSource_in_fromClause5715);
            			    	tableSource168 = tableSource();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( (state.backtracking==0) ) stream_tableSource.Add(tableSource168.Tree);

            			    }
            			    break;

            			default:
            			    goto loop60;
            	    }
            	} while (true);

            	loop60:
            		;	// Stops C# compiler whining that label 'loop60' has no statements



            	// AST REWRITE
            	// elements:          tableSource, FROM
            	// token labels:      
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 646:5: -> ^( FROM ( tableSource )+ )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:646:8: ^( FROM ( tableSource )+ )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_FROM.NextNode(), root_1);

            	    if ( !(stream_tableSource.HasNext()) ) {
            	        throw new RewriteEarlyExitException();
            	    }
            	    while ( stream_tableSource.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_tableSource.NextTree());

            	    }
            	    stream_tableSource.Reset();

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 24, fromClause_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "fromClause"

    public class joinType_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "joinType"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:652:1: joinType : ( CROSS -> ^( TYPE CROSS ) | (t= INNER | ( (t= LEFT | t= RIGHT | t= FULL ) (o= OUTER )? ) ) -> ^( TYPE $t ( $o)? ) );
    public SqlParser.joinType_return joinType() // throws RecognitionException [1]
    {   
        SqlParser.joinType_return retval = new SqlParser.joinType_return();
        retval.Start = input.LT(1);
        int joinType_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken t = null;
        IToken o = null;
        IToken CROSS169 = null;

        CommonTree t_tree=null;
        CommonTree o_tree=null;
        CommonTree CROSS169_tree=null;
        RewriteRuleTokenStream stream_OUTER = new RewriteRuleTokenStream(adaptor,"token OUTER");
        RewriteRuleTokenStream stream_RIGHT = new RewriteRuleTokenStream(adaptor,"token RIGHT");
        RewriteRuleTokenStream stream_FULL = new RewriteRuleTokenStream(adaptor,"token FULL");
        RewriteRuleTokenStream stream_INNER = new RewriteRuleTokenStream(adaptor,"token INNER");
        RewriteRuleTokenStream stream_CROSS = new RewriteRuleTokenStream(adaptor,"token CROSS");
        RewriteRuleTokenStream stream_LEFT = new RewriteRuleTokenStream(adaptor,"token LEFT");

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 25) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:653:5: ( CROSS -> ^( TYPE CROSS ) | (t= INNER | ( (t= LEFT | t= RIGHT | t= FULL ) (o= OUTER )? ) ) -> ^( TYPE $t ( $o)? ) )
            int alt64 = 2;
            int LA64_0 = input.LA(1);

            if ( (LA64_0 == CROSS) )
            {
                alt64 = 1;
            }
            else if ( (LA64_0 == FULL || LA64_0 == INNER || LA64_0 == LEFT || LA64_0 == RIGHT) )
            {
                alt64 = 2;
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                NoViableAltException nvae_d64s0 =
                    new NoViableAltException("", 64, 0, input);

                throw nvae_d64s0;
            }
            switch (alt64) 
            {
                case 1 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:653:7: CROSS
                    {
                    	CROSS169=(IToken)Match(input,CROSS,FOLLOW_CROSS_in_joinType5750); if (state.failed) return retval; 
                    	if ( (state.backtracking==0) ) stream_CROSS.Add(CROSS169);



                    	// AST REWRITE
                    	// elements:          CROSS
                    	// token labels:      
                    	// rule labels:       retval
                    	// token list labels: 
                    	// rule list labels:  
                    	// wildcard labels: 
                    	if ( (state.backtracking==0) ) {
                    	retval.Tree = root_0;
                    	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	root_0 = (CommonTree)adaptor.GetNilNode();
                    	// 654:5: -> ^( TYPE CROSS )
                    	{
                    	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:654:8: ^( TYPE CROSS )
                    	    {
                    	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
                    	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(TYPE, "TYPE"), root_1);

                    	    adaptor.AddChild(root_1, stream_CROSS.NextNode());

                    	    adaptor.AddChild(root_0, root_1);
                    	    }

                    	}

                    	retval.Tree = root_0;retval.Tree = root_0;}
                    }
                    break;
                case 2 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:655:7: (t= INNER | ( (t= LEFT | t= RIGHT | t= FULL ) (o= OUTER )? ) )
                    {
                    	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:655:7: (t= INNER | ( (t= LEFT | t= RIGHT | t= FULL ) (o= OUTER )? ) )
                    	int alt63 = 2;
                    	int LA63_0 = input.LA(1);

                    	if ( (LA63_0 == INNER) )
                    	{
                    	    alt63 = 1;
                    	}
                    	else if ( (LA63_0 == FULL || LA63_0 == LEFT || LA63_0 == RIGHT) )
                    	{
                    	    alt63 = 2;
                    	}
                    	else 
                    	{
                    	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    	    NoViableAltException nvae_d63s0 =
                    	        new NoViableAltException("", 63, 0, input);

                    	    throw nvae_d63s0;
                    	}
                    	switch (alt63) 
                    	{
                    	    case 1 :
                    	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:655:9: t= INNER
                    	        {
                    	        	t=(IToken)Match(input,INNER,FOLLOW_INNER_in_joinType5774); if (state.failed) return retval; 
                    	        	if ( (state.backtracking==0) ) stream_INNER.Add(t);


                    	        }
                    	        break;
                    	    case 2 :
                    	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:655:19: ( (t= LEFT | t= RIGHT | t= FULL ) (o= OUTER )? )
                    	        {
                    	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:655:19: ( (t= LEFT | t= RIGHT | t= FULL ) (o= OUTER )? )
                    	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:655:21: (t= LEFT | t= RIGHT | t= FULL ) (o= OUTER )?
                    	        	{
                    	        		// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:655:21: (t= LEFT | t= RIGHT | t= FULL )
                    	        		int alt61 = 3;
                    	        		switch ( input.LA(1) ) 
                    	        		{
                    	        		case LEFT:
                    	        			{
                    	        		    alt61 = 1;
                    	        		    }
                    	        		    break;
                    	        		case RIGHT:
                    	        			{
                    	        		    alt61 = 2;
                    	        		    }
                    	        		    break;
                    	        		case FULL:
                    	        			{
                    	        		    alt61 = 3;
                    	        		    }
                    	        		    break;
                    	        			default:
                    	        			    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    	        			    NoViableAltException nvae_d61s0 =
                    	        			        new NoViableAltException("", 61, 0, input);

                    	        			    throw nvae_d61s0;
                    	        		}

                    	        		switch (alt61) 
                    	        		{
                    	        		    case 1 :
                    	        		        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:655:22: t= LEFT
                    	        		        {
                    	        		        	t=(IToken)Match(input,LEFT,FOLLOW_LEFT_in_joinType5783); if (state.failed) return retval; 
                    	        		        	if ( (state.backtracking==0) ) stream_LEFT.Add(t);


                    	        		        }
                    	        		        break;
                    	        		    case 2 :
                    	        		        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:655:29: t= RIGHT
                    	        		        {
                    	        		        	t=(IToken)Match(input,RIGHT,FOLLOW_RIGHT_in_joinType5787); if (state.failed) return retval; 
                    	        		        	if ( (state.backtracking==0) ) stream_RIGHT.Add(t);


                    	        		        }
                    	        		        break;
                    	        		    case 3 :
                    	        		        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:655:37: t= FULL
                    	        		        {
                    	        		        	t=(IToken)Match(input,FULL,FOLLOW_FULL_in_joinType5791); if (state.failed) return retval; 
                    	        		        	if ( (state.backtracking==0) ) stream_FULL.Add(t);


                    	        		        }
                    	        		        break;

                    	        		}

                    	        		// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:655:45: (o= OUTER )?
                    	        		int alt62 = 2;
                    	        		int LA62_0 = input.LA(1);

                    	        		if ( (LA62_0 == OUTER) )
                    	        		{
                    	        		    alt62 = 1;
                    	        		}
                    	        		switch (alt62) 
                    	        		{
                    	        		    case 1 :
                    	        		        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:655:46: o= OUTER
                    	        		        {
                    	        		        	o=(IToken)Match(input,OUTER,FOLLOW_OUTER_in_joinType5797); if (state.failed) return retval; 
                    	        		        	if ( (state.backtracking==0) ) stream_OUTER.Add(o);


                    	        		        }
                    	        		        break;

                    	        		}


                    	        	}


                    	        }
                    	        break;

                    	}



                    	// AST REWRITE
                    	// elements:          o, t
                    	// token labels:      t, o
                    	// rule labels:       retval
                    	// token list labels: 
                    	// rule list labels:  
                    	// wildcard labels: 
                    	if ( (state.backtracking==0) ) {
                    	retval.Tree = root_0;
                    	RewriteRuleTokenStream stream_t = new RewriteRuleTokenStream(adaptor, "token t", t);
                    	RewriteRuleTokenStream stream_o = new RewriteRuleTokenStream(adaptor, "token o", o);
                    	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	root_0 = (CommonTree)adaptor.GetNilNode();
                    	// 656:5: -> ^( TYPE $t ( $o)? )
                    	{
                    	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:656:8: ^( TYPE $t ( $o)? )
                    	    {
                    	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
                    	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(TYPE, "TYPE"), root_1);

                    	    adaptor.AddChild(root_1, stream_t.NextNode());
                    	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:656:18: ( $o)?
                    	    if ( stream_o.HasNext() )
                    	    {
                    	        adaptor.AddChild(root_1, stream_o.NextNode());

                    	    }
                    	    stream_o.Reset();

                    	    adaptor.AddChild(root_0, root_1);
                    	    }

                    	}

                    	retval.Tree = root_0;retval.Tree = root_0;}
                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 25, joinType_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "joinType"

    public class joinPred_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "joinPred"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:659:1: joinPred : ON searchCondition -> ^( ON searchCondition ) ;
    public SqlParser.joinPred_return joinPred() // throws RecognitionException [1]
    {   
        SqlParser.joinPred_return retval = new SqlParser.joinPred_return();
        retval.Start = input.LT(1);
        int joinPred_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken ON170 = null;
        SqlParser.searchCondition_return searchCondition171 = default(SqlParser.searchCondition_return);


        CommonTree ON170_tree=null;
        RewriteRuleTokenStream stream_ON = new RewriteRuleTokenStream(adaptor,"token ON");
        RewriteRuleSubtreeStream stream_searchCondition = new RewriteRuleSubtreeStream(adaptor,"rule searchCondition");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 26) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:660:5: ( ON searchCondition -> ^( ON searchCondition ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:661:5: ON searchCondition
            {
            	ON170=(IToken)Match(input,ON,FOLLOW_ON_in_joinPred5841); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_ON.Add(ON170);

            	PushFollow(FOLLOW_searchCondition_in_joinPred5843);
            	searchCondition171 = searchCondition();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_searchCondition.Add(searchCondition171.Tree);


            	// AST REWRITE
            	// elements:          searchCondition, ON
            	// token labels:      
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 662:5: -> ^( ON searchCondition )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:662:8: ^( ON searchCondition )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_ON.NextNode(), root_1);

            	    adaptor.AddChild(root_1, stream_searchCondition.NextTree());

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 26, joinPred_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "joinPred"

    public class tableSource_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "tableSource"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:665:1: tableSource : ( joinedTables -> ^( joinedTables ) | subTableSource );
    public SqlParser.tableSource_return tableSource() // throws RecognitionException [1]
    {   
        SqlParser.tableSource_return retval = new SqlParser.tableSource_return();
        retval.Start = input.LT(1);
        int tableSource_StartIndex = input.Index();
        CommonTree root_0 = null;

        SqlParser.joinedTables_return joinedTables172 = default(SqlParser.joinedTables_return);

        SqlParser.subTableSource_return subTableSource173 = default(SqlParser.subTableSource_return);


        RewriteRuleSubtreeStream stream_joinedTables = new RewriteRuleSubtreeStream(adaptor,"rule joinedTables");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 27) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:666:5: ( joinedTables -> ^( joinedTables ) | subTableSource )
            int alt65 = 2;
            alt65 = dfa65.Predict(input);
            switch (alt65) 
            {
                case 1 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:667:5: joinedTables
                    {
                    	PushFollow(FOLLOW_joinedTables_in_tableSource5876);
                    	joinedTables172 = joinedTables();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( (state.backtracking==0) ) stream_joinedTables.Add(joinedTables172.Tree);


                    	// AST REWRITE
                    	// elements:          joinedTables
                    	// token labels:      
                    	// rule labels:       retval
                    	// token list labels: 
                    	// rule list labels:  
                    	// wildcard labels: 
                    	if ( (state.backtracking==0) ) {
                    	retval.Tree = root_0;
                    	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	root_0 = (CommonTree)adaptor.GetNilNode();
                    	// 668:5: -> ^( joinedTables )
                    	{
                    	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:668:8: ^( joinedTables )
                    	    {
                    	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
                    	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_joinedTables.NextNode(), root_1);

                    	    adaptor.AddChild(root_0, root_1);
                    	    }

                    	}

                    	retval.Tree = root_0;retval.Tree = root_0;}
                    }
                    break;
                case 2 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:669:7: subTableSource
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_subTableSource_in_tableSource5894);
                    	subTableSource173 = subTableSource();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, subTableSource173.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 27, tableSource_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "tableSource"

    public class subTableSource_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "subTableSource"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:672:1: subTableSource : ( LPAREN ( ( joinedTables )=> joinedTables RPAREN -> ^( joinedTables ) | ( queryExpression )=> queryExpression RPAREN alias1 -> ^( TABLE queryExpression alias1 ) ) | function ( alias1 )? -> ^( TABLEFUNCTION function ( alias1 )? ) | dbObject ( alias1 )? ( ( WITH )? LPAREN tableHint ( COMMA tableHint )* RPAREN )? -> ^( TABLE dbObject ( alias1 )? ) | Variable ( alias1 )? -> ^( TABLE Variable ( alias1 )? ) | ( COLON COLON function ( alias1 )? ) -> ^( TABLEFUNCTION function ( alias1 )? ) ) ;
    public SqlParser.subTableSource_return subTableSource() // throws RecognitionException [1]
    {   
        SqlParser.subTableSource_return retval = new SqlParser.subTableSource_return();
        retval.Start = input.LT(1);
        int subTableSource_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken LPAREN174 = null;
        IToken RPAREN176 = null;
        IToken RPAREN178 = null;
        IToken WITH184 = null;
        IToken LPAREN185 = null;
        IToken COMMA187 = null;
        IToken RPAREN189 = null;
        IToken Variable190 = null;
        IToken COLON192 = null;
        IToken COLON193 = null;
        SqlParser.joinedTables_return joinedTables175 = default(SqlParser.joinedTables_return);

        SqlParser.queryExpression_return queryExpression177 = default(SqlParser.queryExpression_return);

        SqlParser.alias1_return alias1179 = default(SqlParser.alias1_return);

        SqlParser.function_return function180 = default(SqlParser.function_return);

        SqlParser.alias1_return alias1181 = default(SqlParser.alias1_return);

        SqlParser.dbObject_return dbObject182 = default(SqlParser.dbObject_return);

        SqlParser.alias1_return alias1183 = default(SqlParser.alias1_return);

        SqlParser.tableHint_return tableHint186 = default(SqlParser.tableHint_return);

        SqlParser.tableHint_return tableHint188 = default(SqlParser.tableHint_return);

        SqlParser.alias1_return alias1191 = default(SqlParser.alias1_return);

        SqlParser.function_return function194 = default(SqlParser.function_return);

        SqlParser.alias1_return alias1195 = default(SqlParser.alias1_return);


        CommonTree LPAREN174_tree=null;
        CommonTree RPAREN176_tree=null;
        CommonTree RPAREN178_tree=null;
        CommonTree WITH184_tree=null;
        CommonTree LPAREN185_tree=null;
        CommonTree COMMA187_tree=null;
        CommonTree RPAREN189_tree=null;
        CommonTree Variable190_tree=null;
        CommonTree COLON192_tree=null;
        CommonTree COLON193_tree=null;
        RewriteRuleTokenStream stream_COLON = new RewriteRuleTokenStream(adaptor,"token COLON");
        RewriteRuleTokenStream stream_RPAREN = new RewriteRuleTokenStream(adaptor,"token RPAREN");
        RewriteRuleTokenStream stream_Variable = new RewriteRuleTokenStream(adaptor,"token Variable");
        RewriteRuleTokenStream stream_COMMA = new RewriteRuleTokenStream(adaptor,"token COMMA");
        RewriteRuleTokenStream stream_LPAREN = new RewriteRuleTokenStream(adaptor,"token LPAREN");
        RewriteRuleTokenStream stream_WITH = new RewriteRuleTokenStream(adaptor,"token WITH");
        RewriteRuleSubtreeStream stream_tableHint = new RewriteRuleSubtreeStream(adaptor,"rule tableHint");
        RewriteRuleSubtreeStream stream_alias1 = new RewriteRuleSubtreeStream(adaptor,"rule alias1");
        RewriteRuleSubtreeStream stream_queryExpression = new RewriteRuleSubtreeStream(adaptor,"rule queryExpression");
        RewriteRuleSubtreeStream stream_dbObject = new RewriteRuleSubtreeStream(adaptor,"rule dbObject");
        RewriteRuleSubtreeStream stream_joinedTables = new RewriteRuleSubtreeStream(adaptor,"rule joinedTables");
        RewriteRuleSubtreeStream stream_function = new RewriteRuleSubtreeStream(adaptor,"rule function");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 28) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:673:5: ( ( LPAREN ( ( joinedTables )=> joinedTables RPAREN -> ^( joinedTables ) | ( queryExpression )=> queryExpression RPAREN alias1 -> ^( TABLE queryExpression alias1 ) ) | function ( alias1 )? -> ^( TABLEFUNCTION function ( alias1 )? ) | dbObject ( alias1 )? ( ( WITH )? LPAREN tableHint ( COMMA tableHint )* RPAREN )? -> ^( TABLE dbObject ( alias1 )? ) | Variable ( alias1 )? -> ^( TABLE Variable ( alias1 )? ) | ( COLON COLON function ( alias1 )? ) -> ^( TABLEFUNCTION function ( alias1 )? ) ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:674:5: ( LPAREN ( ( joinedTables )=> joinedTables RPAREN -> ^( joinedTables ) | ( queryExpression )=> queryExpression RPAREN alias1 -> ^( TABLE queryExpression alias1 ) ) | function ( alias1 )? -> ^( TABLEFUNCTION function ( alias1 )? ) | dbObject ( alias1 )? ( ( WITH )? LPAREN tableHint ( COMMA tableHint )* RPAREN )? -> ^( TABLE dbObject ( alias1 )? ) | Variable ( alias1 )? -> ^( TABLE Variable ( alias1 )? ) | ( COLON COLON function ( alias1 )? ) -> ^( TABLEFUNCTION function ( alias1 )? ) )
            {
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:674:5: ( LPAREN ( ( joinedTables )=> joinedTables RPAREN -> ^( joinedTables ) | ( queryExpression )=> queryExpression RPAREN alias1 -> ^( TABLE queryExpression alias1 ) ) | function ( alias1 )? -> ^( TABLEFUNCTION function ( alias1 )? ) | dbObject ( alias1 )? ( ( WITH )? LPAREN tableHint ( COMMA tableHint )* RPAREN )? -> ^( TABLE dbObject ( alias1 )? ) | Variable ( alias1 )? -> ^( TABLE Variable ( alias1 )? ) | ( COLON COLON function ( alias1 )? ) -> ^( TABLEFUNCTION function ( alias1 )? ) )
            	int alt74 = 5;
            	alt74 = dfa74.Predict(input);
            	switch (alt74) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:675:7: LPAREN ( ( joinedTables )=> joinedTables RPAREN -> ^( joinedTables ) | ( queryExpression )=> queryExpression RPAREN alias1 -> ^( TABLE queryExpression alias1 ) )
            	        {
            	        	LPAREN174=(IToken)Match(input,LPAREN,FOLLOW_LPAREN_in_subTableSource5923); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_LPAREN.Add(LPAREN174);

            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:675:14: ( ( joinedTables )=> joinedTables RPAREN -> ^( joinedTables ) | ( queryExpression )=> queryExpression RPAREN alias1 -> ^( TABLE queryExpression alias1 ) )
            	        	int alt66 = 2;
            	        	alt66 = dfa66.Predict(input);
            	        	switch (alt66) 
            	        	{
            	        	    case 1 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:676:13: ( joinedTables )=> joinedTables RPAREN
            	        	        {
            	        	        	PushFollow(FOLLOW_joinedTables_in_subTableSource5945);
            	        	        	joinedTables175 = joinedTables();
            	        	        	state.followingStackPointer--;
            	        	        	if (state.failed) return retval;
            	        	        	if ( (state.backtracking==0) ) stream_joinedTables.Add(joinedTables175.Tree);
            	        	        	RPAREN176=(IToken)Match(input,RPAREN,FOLLOW_RPAREN_in_subTableSource5947); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_RPAREN.Add(RPAREN176);



            	        	        	// AST REWRITE
            	        	        	// elements:          joinedTables
            	        	        	// token labels:      
            	        	        	// rule labels:       retval
            	        	        	// token list labels: 
            	        	        	// rule list labels:  
            	        	        	// wildcard labels: 
            	        	        	if ( (state.backtracking==0) ) {
            	        	        	retval.Tree = root_0;
            	        	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	        	        	root_0 = (CommonTree)adaptor.GetNilNode();
            	        	        	// 677:11: -> ^( joinedTables )
            	        	        	{
            	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:677:14: ^( joinedTables )
            	        	        	    {
            	        	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	        	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_joinedTables.NextNode(), root_1);

            	        	        	    adaptor.AddChild(root_0, root_1);
            	        	        	    }

            	        	        	}

            	        	        	retval.Tree = root_0;retval.Tree = root_0;}
            	        	        }
            	        	        break;
            	        	    case 2 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:678:13: ( queryExpression )=> queryExpression RPAREN alias1
            	        	        {
            	        	        	PushFollow(FOLLOW_queryExpression_in_subTableSource5983);
            	        	        	queryExpression177 = queryExpression();
            	        	        	state.followingStackPointer--;
            	        	        	if (state.failed) return retval;
            	        	        	if ( (state.backtracking==0) ) stream_queryExpression.Add(queryExpression177.Tree);
            	        	        	RPAREN178=(IToken)Match(input,RPAREN,FOLLOW_RPAREN_in_subTableSource5985); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_RPAREN.Add(RPAREN178);

            	        	        	PushFollow(FOLLOW_alias1_in_subTableSource5987);
            	        	        	alias1179 = alias1();
            	        	        	state.followingStackPointer--;
            	        	        	if (state.failed) return retval;
            	        	        	if ( (state.backtracking==0) ) stream_alias1.Add(alias1179.Tree);
            	        	        	if ( (state.backtracking==0) )
            	        	        	{

            	        	        	              if ( ((queryExpression177 != null) ? queryExpression177.result : default(SqlQuery)) != null )
            	        	        	                  ((QueryScope_scope)QueryScope_stack.Peek()).current.addSubQueryAtFrom(((queryExpression177 != null) ? queryExpression177.result : default(SqlQuery)));
            	        	        	            
            	        	        	}


            	        	        	// AST REWRITE
            	        	        	// elements:          alias1, queryExpression
            	        	        	// token labels:      
            	        	        	// rule labels:       retval
            	        	        	// token list labels: 
            	        	        	// rule list labels:  
            	        	        	// wildcard labels: 
            	        	        	if ( (state.backtracking==0) ) {
            	        	        	retval.Tree = root_0;
            	        	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	        	        	root_0 = (CommonTree)adaptor.GetNilNode();
            	        	        	// 683:11: -> ^( TABLE queryExpression alias1 )
            	        	        	{
            	        	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:683:14: ^( TABLE queryExpression alias1 )
            	        	        	    {
            	        	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	        	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(TABLE, "TABLE"), root_1);

            	        	        	    adaptor.AddChild(root_1, stream_queryExpression.NextTree());
            	        	        	    adaptor.AddChild(root_1, stream_alias1.NextTree());

            	        	        	    adaptor.AddChild(root_0, root_1);
            	        	        	    }

            	        	        	}

            	        	        	retval.Tree = root_0;retval.Tree = root_0;}
            	        	        }
            	        	        break;

            	        	}


            	        }
            	        break;
            	    case 2 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:685:7: function ( alias1 )?
            	        {
            	        	PushFollow(FOLLOW_function_in_subTableSource6040);
            	        	function180 = function();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_function.Add(function180.Tree);
            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:685:16: ( alias1 )?
            	        	int alt67 = 2;
            	        	alt67 = dfa67.Predict(input);
            	        	switch (alt67) 
            	        	{
            	        	    case 1 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:685:17: alias1
            	        	        {
            	        	        	PushFollow(FOLLOW_alias1_in_subTableSource6043);
            	        	        	alias1181 = alias1();
            	        	        	state.followingStackPointer--;
            	        	        	if (state.failed) return retval;
            	        	        	if ( (state.backtracking==0) ) stream_alias1.Add(alias1181.Tree);

            	        	        }
            	        	        break;

            	        	}



            	        	// AST REWRITE
            	        	// elements:          alias1, function
            	        	// token labels:      
            	        	// rule labels:       retval
            	        	// token list labels: 
            	        	// rule list labels:  
            	        	// wildcard labels: 
            	        	if ( (state.backtracking==0) ) {
            	        	retval.Tree = root_0;
            	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	        	root_0 = (CommonTree)adaptor.GetNilNode();
            	        	// 686:5: -> ^( TABLEFUNCTION function ( alias1 )? )
            	        	{
            	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:686:8: ^( TABLEFUNCTION function ( alias1 )? )
            	        	    {
            	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(TABLEFUNCTION, "TABLEFUNCTION"), root_1);

            	        	    adaptor.AddChild(root_1, stream_function.NextTree());
            	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:686:33: ( alias1 )?
            	        	    if ( stream_alias1.HasNext() )
            	        	    {
            	        	        adaptor.AddChild(root_1, stream_alias1.NextTree());

            	        	    }
            	        	    stream_alias1.Reset();

            	        	    adaptor.AddChild(root_0, root_1);
            	        	    }

            	        	}

            	        	retval.Tree = root_0;retval.Tree = root_0;}
            	        }
            	        break;
            	    case 3 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:7: dbObject ( alias1 )? ( ( WITH )? LPAREN tableHint ( COMMA tableHint )* RPAREN )?
            	        {
            	        	PushFollow(FOLLOW_dbObject_in_subTableSource6074);
            	        	dbObject182 = dbObject();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_dbObject.Add(dbObject182.Tree);
            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:16: ( alias1 )?
            	        	int alt68 = 2;
            	        	alt68 = dfa68.Predict(input);
            	        	switch (alt68) 
            	        	{
            	        	    case 1 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:17: alias1
            	        	        {
            	        	        	PushFollow(FOLLOW_alias1_in_subTableSource6077);
            	        	        	alias1183 = alias1();
            	        	        	state.followingStackPointer--;
            	        	        	if (state.failed) return retval;
            	        	        	if ( (state.backtracking==0) ) stream_alias1.Add(alias1183.Tree);

            	        	        }
            	        	        break;

            	        	}

            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:26: ( ( WITH )? LPAREN tableHint ( COMMA tableHint )* RPAREN )?
            	        	int alt71 = 2;
            	        	alt71 = dfa71.Predict(input);
            	        	switch (alt71) 
            	        	{
            	        	    case 1 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:28: ( WITH )? LPAREN tableHint ( COMMA tableHint )* RPAREN
            	        	        {
            	        	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:28: ( WITH )?
            	        	        	int alt69 = 2;
            	        	        	int LA69_0 = input.LA(1);

            	        	        	if ( (LA69_0 == WITH) )
            	        	        	{
            	        	        	    alt69 = 1;
            	        	        	}
            	        	        	switch (alt69) 
            	        	        	{
            	        	        	    case 1 :
            	        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:29: WITH
            	        	        	        {
            	        	        	        	WITH184=(IToken)Match(input,WITH,FOLLOW_WITH_in_subTableSource6084); if (state.failed) return retval; 
            	        	        	        	if ( (state.backtracking==0) ) stream_WITH.Add(WITH184);


            	        	        	        }
            	        	        	        break;

            	        	        	}

            	        	        	LPAREN185=(IToken)Match(input,LPAREN,FOLLOW_LPAREN_in_subTableSource6088); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_LPAREN.Add(LPAREN185);

            	        	        	PushFollow(FOLLOW_tableHint_in_subTableSource6090);
            	        	        	tableHint186 = tableHint();
            	        	        	state.followingStackPointer--;
            	        	        	if (state.failed) return retval;
            	        	        	if ( (state.backtracking==0) ) stream_tableHint.Add(tableHint186.Tree);
            	        	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:53: ( COMMA tableHint )*
            	        	        	do 
            	        	        	{
            	        	        	    int alt70 = 2;
            	        	        	    int LA70_0 = input.LA(1);

            	        	        	    if ( (LA70_0 == COMMA) )
            	        	        	    {
            	        	        	        alt70 = 1;
            	        	        	    }


            	        	        	    switch (alt70) 
            	        	        		{
            	        	        			case 1 :
            	        	        			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:54: COMMA tableHint
            	        	        			    {
            	        	        			    	COMMA187=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_subTableSource6093); if (state.failed) return retval; 
            	        	        			    	if ( (state.backtracking==0) ) stream_COMMA.Add(COMMA187);

            	        	        			    	PushFollow(FOLLOW_tableHint_in_subTableSource6095);
            	        	        			    	tableHint188 = tableHint();
            	        	        			    	state.followingStackPointer--;
            	        	        			    	if (state.failed) return retval;
            	        	        			    	if ( (state.backtracking==0) ) stream_tableHint.Add(tableHint188.Tree);

            	        	        			    }
            	        	        			    break;

            	        	        			default:
            	        	        			    goto loop70;
            	        	        	    }
            	        	        	} while (true);

            	        	        	loop70:
            	        	        		;	// Stops C# compiler whining that label 'loop70' has no statements

            	        	        	RPAREN189=(IToken)Match(input,RPAREN,FOLLOW_RPAREN_in_subTableSource6099); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_RPAREN.Add(RPAREN189);


            	        	        }
            	        	        break;

            	        	}



            	        	// AST REWRITE
            	        	// elements:          alias1, dbObject
            	        	// token labels:      
            	        	// rule labels:       retval
            	        	// token list labels: 
            	        	// rule list labels:  
            	        	// wildcard labels: 
            	        	if ( (state.backtracking==0) ) {
            	        	retval.Tree = root_0;
            	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	        	root_0 = (CommonTree)adaptor.GetNilNode();
            	        	// 690:5: -> ^( TABLE dbObject ( alias1 )? )
            	        	{
            	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:690:8: ^( TABLE dbObject ( alias1 )? )
            	        	    {
            	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(TABLE, "TABLE"), root_1);

            	        	    adaptor.AddChild(root_1, stream_dbObject.NextTree());
            	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:690:25: ( alias1 )?
            	        	    if ( stream_alias1.HasNext() )
            	        	    {
            	        	        adaptor.AddChild(root_1, stream_alias1.NextTree());

            	        	    }
            	        	    stream_alias1.Reset();

            	        	    adaptor.AddChild(root_0, root_1);
            	        	    }

            	        	}

            	        	retval.Tree = root_0;retval.Tree = root_0;}
            	        }
            	        break;
            	    case 4 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:691:7: Variable ( alias1 )?
            	        {
            	        	Variable190=(IToken)Match(input,Variable,FOLLOW_Variable_in_subTableSource6125); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_Variable.Add(Variable190);

            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:691:16: ( alias1 )?
            	        	int alt72 = 2;
            	        	alt72 = dfa72.Predict(input);
            	        	switch (alt72) 
            	        	{
            	        	    case 1 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:691:17: alias1
            	        	        {
            	        	        	PushFollow(FOLLOW_alias1_in_subTableSource6128);
            	        	        	alias1191 = alias1();
            	        	        	state.followingStackPointer--;
            	        	        	if (state.failed) return retval;
            	        	        	if ( (state.backtracking==0) ) stream_alias1.Add(alias1191.Tree);

            	        	        }
            	        	        break;

            	        	}



            	        	// AST REWRITE
            	        	// elements:          alias1, Variable
            	        	// token labels:      
            	        	// rule labels:       retval
            	        	// token list labels: 
            	        	// rule list labels:  
            	        	// wildcard labels: 
            	        	if ( (state.backtracking==0) ) {
            	        	retval.Tree = root_0;
            	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	        	root_0 = (CommonTree)adaptor.GetNilNode();
            	        	// 692:5: -> ^( TABLE Variable ( alias1 )? )
            	        	{
            	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:692:8: ^( TABLE Variable ( alias1 )? )
            	        	    {
            	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(TABLE, "TABLE"), root_1);

            	        	    adaptor.AddChild(root_1, stream_Variable.NextNode());
            	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:692:25: ( alias1 )?
            	        	    if ( stream_alias1.HasNext() )
            	        	    {
            	        	        adaptor.AddChild(root_1, stream_alias1.NextTree());

            	        	    }
            	        	    stream_alias1.Reset();

            	        	    adaptor.AddChild(root_0, root_1);
            	        	    }

            	        	}

            	        	retval.Tree = root_0;retval.Tree = root_0;}
            	        }
            	        break;
            	    case 5 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:698:7: ( COLON COLON function ( alias1 )? )
            	        {
            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:698:7: ( COLON COLON function ( alias1 )? )
            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:698:8: COLON COLON function ( alias1 )?
            	        	{
            	        		COLON192=(IToken)Match(input,COLON,FOLLOW_COLON_in_subTableSource6160); if (state.failed) return retval; 
            	        		if ( (state.backtracking==0) ) stream_COLON.Add(COLON192);

            	        		COLON193=(IToken)Match(input,COLON,FOLLOW_COLON_in_subTableSource6162); if (state.failed) return retval; 
            	        		if ( (state.backtracking==0) ) stream_COLON.Add(COLON193);

            	        		PushFollow(FOLLOW_function_in_subTableSource6164);
            	        		function194 = function();
            	        		state.followingStackPointer--;
            	        		if (state.failed) return retval;
            	        		if ( (state.backtracking==0) ) stream_function.Add(function194.Tree);
            	        		// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:698:29: ( alias1 )?
            	        		int alt73 = 2;
            	        		alt73 = dfa73.Predict(input);
            	        		switch (alt73) 
            	        		{
            	        		    case 1 :
            	        		        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:698:30: alias1
            	        		        {
            	        		        	PushFollow(FOLLOW_alias1_in_subTableSource6167);
            	        		        	alias1195 = alias1();
            	        		        	state.followingStackPointer--;
            	        		        	if (state.failed) return retval;
            	        		        	if ( (state.backtracking==0) ) stream_alias1.Add(alias1195.Tree);

            	        		        }
            	        		        break;

            	        		}


            	        	}



            	        	// AST REWRITE
            	        	// elements:          function, alias1
            	        	// token labels:      
            	        	// rule labels:       retval
            	        	// token list labels: 
            	        	// rule list labels:  
            	        	// wildcard labels: 
            	        	if ( (state.backtracking==0) ) {
            	        	retval.Tree = root_0;
            	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	        	root_0 = (CommonTree)adaptor.GetNilNode();
            	        	// 700:5: -> ^( TABLEFUNCTION function ( alias1 )? )
            	        	{
            	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:700:8: ^( TABLEFUNCTION function ( alias1 )? )
            	        	    {
            	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(TABLEFUNCTION, "TABLEFUNCTION"), root_1);

            	        	    adaptor.AddChild(root_1, stream_function.NextTree());
            	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:700:33: ( alias1 )?
            	        	    if ( stream_alias1.HasNext() )
            	        	    {
            	        	        adaptor.AddChild(root_1, stream_alias1.NextTree());

            	        	    }
            	        	    stream_alias1.Reset();

            	        	    adaptor.AddChild(root_0, root_1);
            	        	    }

            	        	}

            	        	retval.Tree = root_0;retval.Tree = root_0;}
            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 28, subTableSource_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "subTableSource"

    public class joinOp_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "joinOp"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:704:1: joinOp : ( joinType )? ( joinHint )? JOIN -> ^( JOIN ( joinType )? ( ^( HINT joinHint ) )? ) ;
    public SqlParser.joinOp_return joinOp() // throws RecognitionException [1]
    {   
        SqlParser.joinOp_return retval = new SqlParser.joinOp_return();
        retval.Start = input.LT(1);
        int joinOp_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken JOIN198 = null;
        SqlParser.joinType_return joinType196 = default(SqlParser.joinType_return);

        SqlParser.joinHint_return joinHint197 = default(SqlParser.joinHint_return);


        CommonTree JOIN198_tree=null;
        RewriteRuleTokenStream stream_JOIN = new RewriteRuleTokenStream(adaptor,"token JOIN");
        RewriteRuleSubtreeStream stream_joinType = new RewriteRuleSubtreeStream(adaptor,"rule joinType");
        RewriteRuleSubtreeStream stream_joinHint = new RewriteRuleSubtreeStream(adaptor,"rule joinHint");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 29) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:705:5: ( ( joinType )? ( joinHint )? JOIN -> ^( JOIN ( joinType )? ( ^( HINT joinHint ) )? ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:705:7: ( joinType )? ( joinHint )? JOIN
            {
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:705:7: ( joinType )?
            	int alt75 = 2;
            	int LA75_0 = input.LA(1);

            	if ( (LA75_0 == CROSS || LA75_0 == FULL || LA75_0 == INNER || LA75_0 == LEFT || LA75_0 == RIGHT) )
            	{
            	    alt75 = 1;
            	}
            	switch (alt75) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:0:0: joinType
            	        {
            	        	PushFollow(FOLLOW_joinType_in_joinOp6210);
            	        	joinType196 = joinType();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_joinType.Add(joinType196.Tree);

            	        }
            	        break;

            	}

            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:705:17: ( joinHint )?
            	int alt76 = 2;
            	int LA76_0 = input.LA(1);

            	if ( (LA76_0 == HASH || LA76_0 == LOOP || LA76_0 == MERGE || LA76_0 == REMOTE) )
            	{
            	    alt76 = 1;
            	}
            	switch (alt76) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:0:0: joinHint
            	        {
            	        	PushFollow(FOLLOW_joinHint_in_joinOp6213);
            	        	joinHint197 = joinHint();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_joinHint.Add(joinHint197.Tree);

            	        }
            	        break;

            	}

            	JOIN198=(IToken)Match(input,JOIN,FOLLOW_JOIN_in_joinOp6216); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_JOIN.Add(JOIN198);



            	// AST REWRITE
            	// elements:          joinHint, JOIN, joinType
            	// token labels:      
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 706:5: -> ^( JOIN ( joinType )? ( ^( HINT joinHint ) )? )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:706:8: ^( JOIN ( joinType )? ( ^( HINT joinHint ) )? )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_JOIN.NextNode(), root_1);

            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:706:15: ( joinType )?
            	    if ( stream_joinType.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_joinType.NextTree());

            	    }
            	    stream_joinType.Reset();
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:706:25: ( ^( HINT joinHint ) )?
            	    if ( stream_joinHint.HasNext() )
            	    {
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:706:25: ^( HINT joinHint )
            	        {
            	        CommonTree root_2 = (CommonTree)adaptor.GetNilNode();
            	        root_2 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(HINT, "HINT"), root_2);

            	        adaptor.AddChild(root_2, stream_joinHint.NextTree());

            	        adaptor.AddChild(root_1, root_2);
            	        }

            	    }
            	    stream_joinHint.Reset();

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 29, joinOp_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "joinOp"

    public class joinedTables_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "joinedTables"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:709:1: joinedTables : subTableSource ( joinOp tableSource joinPred )+ ;
    public SqlParser.joinedTables_return joinedTables() // throws RecognitionException [1]
    {   
        SqlParser.joinedTables_return retval = new SqlParser.joinedTables_return();
        retval.Start = input.LT(1);
        int joinedTables_StartIndex = input.Index();
        CommonTree root_0 = null;

        SqlParser.subTableSource_return subTableSource199 = default(SqlParser.subTableSource_return);

        SqlParser.joinOp_return joinOp200 = default(SqlParser.joinOp_return);

        SqlParser.tableSource_return tableSource201 = default(SqlParser.tableSource_return);

        SqlParser.joinPred_return joinPred202 = default(SqlParser.joinPred_return);



        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 30) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:710:5: ( subTableSource ( joinOp tableSource joinPred )+ )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:710:7: subTableSource ( joinOp tableSource joinPred )+
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	PushFollow(FOLLOW_subTableSource_in_joinedTables6253);
            	subTableSource199 = subTableSource();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, subTableSource199.Tree);
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:710:22: ( joinOp tableSource joinPred )+
            	int cnt77 = 0;
            	do 
            	{
            	    int alt77 = 2;
            	    alt77 = dfa77.Predict(input);
            	    switch (alt77) 
            		{
            			case 1 :
            			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:710:24: joinOp tableSource joinPred
            			    {
            			    	PushFollow(FOLLOW_joinOp_in_joinedTables6257);
            			    	joinOp200 = joinOp();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) root_0 = (CommonTree)adaptor.BecomeRoot(joinOp200.Tree, root_0);
            			    	PushFollow(FOLLOW_tableSource_in_joinedTables6260);
            			    	tableSource201 = tableSource();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, tableSource201.Tree);
            			    	PushFollow(FOLLOW_joinPred_in_joinedTables6262);
            			    	joinPred202 = joinPred();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, joinPred202.Tree);

            			    }
            			    break;

            			default:
            			    if ( cnt77 >= 1 ) goto loop77;
            			    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            		            EarlyExitException eee77 =
            		                new EarlyExitException(77, input);
            		            throw eee77;
            	    }
            	    cnt77++;
            	} while (true);

            	loop77:
            		;	// Stops C# compiler whining that label 'loop77' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 30, joinedTables_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "joinedTables"

    public class joinHint_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "joinHint"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:713:1: joinHint : ( LOOP | HASH | MERGE | REMOTE );
    public SqlParser.joinHint_return joinHint() // throws RecognitionException [1]
    {   
        SqlParser.joinHint_return retval = new SqlParser.joinHint_return();
        retval.Start = input.LT(1);
        int joinHint_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken set203 = null;

        CommonTree set203_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 31) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:714:5: ( LOOP | HASH | MERGE | REMOTE )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	set203 = (IToken)input.LT(1);
            	if ( input.LA(1) == HASH || input.LA(1) == LOOP || input.LA(1) == MERGE || input.LA(1) == REMOTE ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (CommonTree)adaptor.Create(set203));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 31, joinHint_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "joinHint"

    public class tableHint_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "tableHint"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:721:1: tableHint : ( INDEX ( LPAREN ( identifier | Integer ) ( COMMA ( identifier | Integer ) )* RPAREN | ASSIGNEQUAL identifier ) | FASTFIRSTROW | HOLDLOCK | NOLOCK | PAGLOCK | READCOMMITED | READPAST | READUNCOMMITED | REPEATABLEREAD | ROWLOCK | SERIALIZABLE | TABLOCK | TABLOCKX | UPDLOCK | XLOCK );
    public SqlParser.tableHint_return tableHint() // throws RecognitionException [1]
    {   
        SqlParser.tableHint_return retval = new SqlParser.tableHint_return();
        retval.Start = input.LT(1);
        int tableHint_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken INDEX204 = null;
        IToken LPAREN205 = null;
        IToken Integer207 = null;
        IToken COMMA208 = null;
        IToken Integer210 = null;
        IToken RPAREN211 = null;
        IToken ASSIGNEQUAL212 = null;
        IToken FASTFIRSTROW214 = null;
        IToken HOLDLOCK215 = null;
        IToken NOLOCK216 = null;
        IToken PAGLOCK217 = null;
        IToken READCOMMITED218 = null;
        IToken READPAST219 = null;
        IToken READUNCOMMITED220 = null;
        IToken REPEATABLEREAD221 = null;
        IToken ROWLOCK222 = null;
        IToken SERIALIZABLE223 = null;
        IToken TABLOCK224 = null;
        IToken TABLOCKX225 = null;
        IToken UPDLOCK226 = null;
        IToken XLOCK227 = null;
        SqlParser.identifier_return identifier206 = default(SqlParser.identifier_return);

        SqlParser.identifier_return identifier209 = default(SqlParser.identifier_return);

        SqlParser.identifier_return identifier213 = default(SqlParser.identifier_return);


        CommonTree INDEX204_tree=null;
        CommonTree LPAREN205_tree=null;
        CommonTree Integer207_tree=null;
        CommonTree COMMA208_tree=null;
        CommonTree Integer210_tree=null;
        CommonTree RPAREN211_tree=null;
        CommonTree ASSIGNEQUAL212_tree=null;
        CommonTree FASTFIRSTROW214_tree=null;
        CommonTree HOLDLOCK215_tree=null;
        CommonTree NOLOCK216_tree=null;
        CommonTree PAGLOCK217_tree=null;
        CommonTree READCOMMITED218_tree=null;
        CommonTree READPAST219_tree=null;
        CommonTree READUNCOMMITED220_tree=null;
        CommonTree REPEATABLEREAD221_tree=null;
        CommonTree ROWLOCK222_tree=null;
        CommonTree SERIALIZABLE223_tree=null;
        CommonTree TABLOCK224_tree=null;
        CommonTree TABLOCKX225_tree=null;
        CommonTree UPDLOCK226_tree=null;
        CommonTree XLOCK227_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 32) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:722:5: ( INDEX ( LPAREN ( identifier | Integer ) ( COMMA ( identifier | Integer ) )* RPAREN | ASSIGNEQUAL identifier ) | FASTFIRSTROW | HOLDLOCK | NOLOCK | PAGLOCK | READCOMMITED | READPAST | READUNCOMMITED | REPEATABLEREAD | ROWLOCK | SERIALIZABLE | TABLOCK | TABLOCKX | UPDLOCK | XLOCK )
            int alt82 = 15;
            alt82 = dfa82.Predict(input);
            switch (alt82) 
            {
                case 1 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:723:7: INDEX ( LPAREN ( identifier | Integer ) ( COMMA ( identifier | Integer ) )* RPAREN | ASSIGNEQUAL identifier )
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	INDEX204=(IToken)Match(input,INDEX,FOLLOW_INDEX_in_tableHint6335); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{INDEX204_tree = (CommonTree)adaptor.Create(INDEX204);
                    		adaptor.AddChild(root_0, INDEX204_tree);
                    	}
                    	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:723:13: ( LPAREN ( identifier | Integer ) ( COMMA ( identifier | Integer ) )* RPAREN | ASSIGNEQUAL identifier )
                    	int alt81 = 2;
                    	int LA81_0 = input.LA(1);

                    	if ( (LA81_0 == LPAREN) )
                    	{
                    	    alt81 = 1;
                    	}
                    	else if ( (LA81_0 == ASSIGNEQUAL) )
                    	{
                    	    alt81 = 2;
                    	}
                    	else 
                    	{
                    	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    	    NoViableAltException nvae_d81s0 =
                    	        new NoViableAltException("", 81, 0, input);

                    	    throw nvae_d81s0;
                    	}
                    	switch (alt81) 
                    	{
                    	    case 1 :
                    	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:724:11: LPAREN ( identifier | Integer ) ( COMMA ( identifier | Integer ) )* RPAREN
                    	        {
                    	        	LPAREN205=(IToken)Match(input,LPAREN,FOLLOW_LPAREN_in_tableHint6349); if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 )
                    	        	{LPAREN205_tree = (CommonTree)adaptor.Create(LPAREN205);
                    	        		adaptor.AddChild(root_0, LPAREN205_tree);
                    	        	}
                    	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:724:18: ( identifier | Integer )
                    	        	int alt78 = 2;
                    	        	int LA78_0 = input.LA(1);

                    	        	if ( ((LA78_0 >= NonQuotedIdentifier && LA78_0 <= QuotedIdentifier)) )
                    	        	{
                    	        	    alt78 = 1;
                    	        	}
                    	        	else if ( (LA78_0 == Integer) )
                    	        	{
                    	        	    alt78 = 2;
                    	        	}
                    	        	else 
                    	        	{
                    	        	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    	        	    NoViableAltException nvae_d78s0 =
                    	        	        new NoViableAltException("", 78, 0, input);

                    	        	    throw nvae_d78s0;
                    	        	}
                    	        	switch (alt78) 
                    	        	{
                    	        	    case 1 :
                    	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:724:19: identifier
                    	        	        {
                    	        	        	PushFollow(FOLLOW_identifier_in_tableHint6352);
                    	        	        	identifier206 = identifier();
                    	        	        	state.followingStackPointer--;
                    	        	        	if (state.failed) return retval;
                    	        	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, identifier206.Tree);

                    	        	        }
                    	        	        break;
                    	        	    case 2 :
                    	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:724:32: Integer
                    	        	        {
                    	        	        	Integer207=(IToken)Match(input,Integer,FOLLOW_Integer_in_tableHint6356); if (state.failed) return retval;
                    	        	        	if ( state.backtracking == 0 )
                    	        	        	{Integer207_tree = (CommonTree)adaptor.Create(Integer207);
                    	        	        		adaptor.AddChild(root_0, Integer207_tree);
                    	        	        	}

                    	        	        }
                    	        	        break;

                    	        	}

                    	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:724:41: ( COMMA ( identifier | Integer ) )*
                    	        	do 
                    	        	{
                    	        	    int alt80 = 2;
                    	        	    int LA80_0 = input.LA(1);

                    	        	    if ( (LA80_0 == COMMA) )
                    	        	    {
                    	        	        alt80 = 1;
                    	        	    }


                    	        	    switch (alt80) 
                    	        		{
                    	        			case 1 :
                    	        			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:724:43: COMMA ( identifier | Integer )
                    	        			    {
                    	        			    	COMMA208=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_tableHint6361); if (state.failed) return retval;
                    	        			    	if ( state.backtracking == 0 )
                    	        			    	{COMMA208_tree = (CommonTree)adaptor.Create(COMMA208);
                    	        			    		adaptor.AddChild(root_0, COMMA208_tree);
                    	        			    	}
                    	        			    	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:724:49: ( identifier | Integer )
                    	        			    	int alt79 = 2;
                    	        			    	int LA79_0 = input.LA(1);

                    	        			    	if ( ((LA79_0 >= NonQuotedIdentifier && LA79_0 <= QuotedIdentifier)) )
                    	        			    	{
                    	        			    	    alt79 = 1;
                    	        			    	}
                    	        			    	else if ( (LA79_0 == Integer) )
                    	        			    	{
                    	        			    	    alt79 = 2;
                    	        			    	}
                    	        			    	else 
                    	        			    	{
                    	        			    	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    	        			    	    NoViableAltException nvae_d79s0 =
                    	        			    	        new NoViableAltException("", 79, 0, input);

                    	        			    	    throw nvae_d79s0;
                    	        			    	}
                    	        			    	switch (alt79) 
                    	        			    	{
                    	        			    	    case 1 :
                    	        			    	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:724:50: identifier
                    	        			    	        {
                    	        			    	        	PushFollow(FOLLOW_identifier_in_tableHint6364);
                    	        			    	        	identifier209 = identifier();
                    	        			    	        	state.followingStackPointer--;
                    	        			    	        	if (state.failed) return retval;
                    	        			    	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, identifier209.Tree);

                    	        			    	        }
                    	        			    	        break;
                    	        			    	    case 2 :
                    	        			    	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:724:63: Integer
                    	        			    	        {
                    	        			    	        	Integer210=(IToken)Match(input,Integer,FOLLOW_Integer_in_tableHint6368); if (state.failed) return retval;
                    	        			    	        	if ( state.backtracking == 0 )
                    	        			    	        	{Integer210_tree = (CommonTree)adaptor.Create(Integer210);
                    	        			    	        		adaptor.AddChild(root_0, Integer210_tree);
                    	        			    	        	}

                    	        			    	        }
                    	        			    	        break;

                    	        			    	}


                    	        			    }
                    	        			    break;

                    	        			default:
                    	        			    goto loop80;
                    	        	    }
                    	        	} while (true);

                    	        	loop80:
                    	        		;	// Stops C# compiler whining that label 'loop80' has no statements

                    	        	RPAREN211=(IToken)Match(input,RPAREN,FOLLOW_RPAREN_in_tableHint6374); if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 )
                    	        	{RPAREN211_tree = (CommonTree)adaptor.Create(RPAREN211);
                    	        		adaptor.AddChild(root_0, RPAREN211_tree);
                    	        	}

                    	        }
                    	        break;
                    	    case 2 :
                    	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:725:11: ASSIGNEQUAL identifier
                    	        {
                    	        	ASSIGNEQUAL212=(IToken)Match(input,ASSIGNEQUAL,FOLLOW_ASSIGNEQUAL_in_tableHint6386); if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 )
                    	        	{ASSIGNEQUAL212_tree = (CommonTree)adaptor.Create(ASSIGNEQUAL212);
                    	        		adaptor.AddChild(root_0, ASSIGNEQUAL212_tree);
                    	        	}
                    	        	PushFollow(FOLLOW_identifier_in_tableHint6388);
                    	        	identifier213 = identifier();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, identifier213.Tree);

                    	        }
                    	        break;

                    	}


                    }
                    break;
                case 2 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:727:7: FASTFIRSTROW
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	FASTFIRSTROW214=(IToken)Match(input,FASTFIRSTROW,FOLLOW_FASTFIRSTROW_in_tableHint6410); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{FASTFIRSTROW214_tree = (CommonTree)adaptor.Create(FASTFIRSTROW214);
                    		adaptor.AddChild(root_0, FASTFIRSTROW214_tree);
                    	}

                    }
                    break;
                case 3 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:728:7: HOLDLOCK
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	HOLDLOCK215=(IToken)Match(input,HOLDLOCK,FOLLOW_HOLDLOCK_in_tableHint6418); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{HOLDLOCK215_tree = (CommonTree)adaptor.Create(HOLDLOCK215);
                    		adaptor.AddChild(root_0, HOLDLOCK215_tree);
                    	}

                    }
                    break;
                case 4 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:729:7: NOLOCK
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	NOLOCK216=(IToken)Match(input,NOLOCK,FOLLOW_NOLOCK_in_tableHint6426); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{NOLOCK216_tree = (CommonTree)adaptor.Create(NOLOCK216);
                    		adaptor.AddChild(root_0, NOLOCK216_tree);
                    	}

                    }
                    break;
                case 5 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:730:7: PAGLOCK
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	PAGLOCK217=(IToken)Match(input,PAGLOCK,FOLLOW_PAGLOCK_in_tableHint6434); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{PAGLOCK217_tree = (CommonTree)adaptor.Create(PAGLOCK217);
                    		adaptor.AddChild(root_0, PAGLOCK217_tree);
                    	}

                    }
                    break;
                case 6 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:731:7: READCOMMITED
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	READCOMMITED218=(IToken)Match(input,READCOMMITED,FOLLOW_READCOMMITED_in_tableHint6442); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{READCOMMITED218_tree = (CommonTree)adaptor.Create(READCOMMITED218);
                    		adaptor.AddChild(root_0, READCOMMITED218_tree);
                    	}

                    }
                    break;
                case 7 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:732:7: READPAST
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	READPAST219=(IToken)Match(input,READPAST,FOLLOW_READPAST_in_tableHint6450); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{READPAST219_tree = (CommonTree)adaptor.Create(READPAST219);
                    		adaptor.AddChild(root_0, READPAST219_tree);
                    	}

                    }
                    break;
                case 8 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:733:7: READUNCOMMITED
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	READUNCOMMITED220=(IToken)Match(input,READUNCOMMITED,FOLLOW_READUNCOMMITED_in_tableHint6458); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{READUNCOMMITED220_tree = (CommonTree)adaptor.Create(READUNCOMMITED220);
                    		adaptor.AddChild(root_0, READUNCOMMITED220_tree);
                    	}

                    }
                    break;
                case 9 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:734:7: REPEATABLEREAD
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	REPEATABLEREAD221=(IToken)Match(input,REPEATABLEREAD,FOLLOW_REPEATABLEREAD_in_tableHint6466); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{REPEATABLEREAD221_tree = (CommonTree)adaptor.Create(REPEATABLEREAD221);
                    		adaptor.AddChild(root_0, REPEATABLEREAD221_tree);
                    	}

                    }
                    break;
                case 10 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:735:7: ROWLOCK
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	ROWLOCK222=(IToken)Match(input,ROWLOCK,FOLLOW_ROWLOCK_in_tableHint6474); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{ROWLOCK222_tree = (CommonTree)adaptor.Create(ROWLOCK222);
                    		adaptor.AddChild(root_0, ROWLOCK222_tree);
                    	}

                    }
                    break;
                case 11 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:736:7: SERIALIZABLE
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	SERIALIZABLE223=(IToken)Match(input,SERIALIZABLE,FOLLOW_SERIALIZABLE_in_tableHint6482); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{SERIALIZABLE223_tree = (CommonTree)adaptor.Create(SERIALIZABLE223);
                    		adaptor.AddChild(root_0, SERIALIZABLE223_tree);
                    	}

                    }
                    break;
                case 12 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:737:7: TABLOCK
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	TABLOCK224=(IToken)Match(input,TABLOCK,FOLLOW_TABLOCK_in_tableHint6490); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{TABLOCK224_tree = (CommonTree)adaptor.Create(TABLOCK224);
                    		adaptor.AddChild(root_0, TABLOCK224_tree);
                    	}

                    }
                    break;
                case 13 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:738:7: TABLOCKX
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	TABLOCKX225=(IToken)Match(input,TABLOCKX,FOLLOW_TABLOCKX_in_tableHint6498); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{TABLOCKX225_tree = (CommonTree)adaptor.Create(TABLOCKX225);
                    		adaptor.AddChild(root_0, TABLOCKX225_tree);
                    	}

                    }
                    break;
                case 14 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:739:7: UPDLOCK
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	UPDLOCK226=(IToken)Match(input,UPDLOCK,FOLLOW_UPDLOCK_in_tableHint6506); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{UPDLOCK226_tree = (CommonTree)adaptor.Create(UPDLOCK226);
                    		adaptor.AddChild(root_0, UPDLOCK226_tree);
                    	}

                    }
                    break;
                case 15 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:740:7: XLOCK
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	XLOCK227=(IToken)Match(input,XLOCK,FOLLOW_XLOCK_in_tableHint6514); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{XLOCK227_tree = (CommonTree)adaptor.Create(XLOCK227);
                    		adaptor.AddChild(root_0, XLOCK227_tree);
                    	}

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 32, tableHint_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "tableHint"

    public class collate_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "collate"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:743:1: collate : COLLATE identifier ;
    public SqlParser.collate_return collate() // throws RecognitionException [1]
    {   
        SqlParser.collate_return retval = new SqlParser.collate_return();
        retval.Start = input.LT(1);
        int collate_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken COLLATE228 = null;
        SqlParser.identifier_return identifier229 = default(SqlParser.identifier_return);


        CommonTree COLLATE228_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 33) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:744:5: ( COLLATE identifier )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:744:7: COLLATE identifier
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	COLLATE228=(IToken)Match(input,COLLATE,FOLLOW_COLLATE_in_collate6531); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{COLLATE228_tree = (CommonTree)adaptor.Create(COLLATE228);
            		adaptor.AddChild(root_0, COLLATE228_tree);
            	}
            	PushFollow(FOLLOW_identifier_in_collate6533);
            	identifier229 = identifier();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, identifier229.Tree);

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 33, collate_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "collate"

    public class alias1_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "alias1"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:747:1: alias1 : ( AS )? ( identifier -> ^( ALIAS identifier ) | stringLiteral -> ^( ALIAS stringLiteral ) | keywordAsIdentifier -> ^( ALIAS keywordAsIdentifier ) ) ;
    public SqlParser.alias1_return alias1() // throws RecognitionException [1]
    {   
        SqlParser.alias1_return retval = new SqlParser.alias1_return();
        retval.Start = input.LT(1);
        int alias1_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken AS230 = null;
        SqlParser.identifier_return identifier231 = default(SqlParser.identifier_return);

        SqlParser.stringLiteral_return stringLiteral232 = default(SqlParser.stringLiteral_return);

        SqlParser.keywordAsIdentifier_return keywordAsIdentifier233 = default(SqlParser.keywordAsIdentifier_return);


        CommonTree AS230_tree=null;
        RewriteRuleTokenStream stream_AS = new RewriteRuleTokenStream(adaptor,"token AS");
        RewriteRuleSubtreeStream stream_keywordAsIdentifier = new RewriteRuleSubtreeStream(adaptor,"rule keywordAsIdentifier");
        RewriteRuleSubtreeStream stream_stringLiteral = new RewriteRuleSubtreeStream(adaptor,"rule stringLiteral");
        RewriteRuleSubtreeStream stream_identifier = new RewriteRuleSubtreeStream(adaptor,"rule identifier");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 34) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:748:5: ( ( AS )? ( identifier -> ^( ALIAS identifier ) | stringLiteral -> ^( ALIAS stringLiteral ) | keywordAsIdentifier -> ^( ALIAS keywordAsIdentifier ) ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:749:5: ( AS )? ( identifier -> ^( ALIAS identifier ) | stringLiteral -> ^( ALIAS stringLiteral ) | keywordAsIdentifier -> ^( ALIAS keywordAsIdentifier ) )
            {
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:749:5: ( AS )?
            	int alt83 = 2;
            	int LA83_0 = input.LA(1);

            	if ( (LA83_0 == AS) )
            	{
            	    alt83 = 1;
            	}
            	switch (alt83) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:749:6: AS
            	        {
            	        	AS230=(IToken)Match(input,AS,FOLLOW_AS_in_alias16560); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_AS.Add(AS230);


            	        }
            	        break;

            	}

            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:749:11: ( identifier -> ^( ALIAS identifier ) | stringLiteral -> ^( ALIAS stringLiteral ) | keywordAsIdentifier -> ^( ALIAS keywordAsIdentifier ) )
            	int alt84 = 3;
            	switch ( input.LA(1) ) 
            	{
            	case NonQuotedIdentifier:
            	case QuotedIdentifier:
            		{
            	    alt84 = 1;
            	    }
            	    break;
            	case UnicodeStringLiteral:
            	case ASCIIStringLiteral:
            		{
            	    alt84 = 2;
            	    }
            	    break;
            	case AUTO:
            	case BASE64:
            	case BINARY:
            	case CAST:
            	case CONCAT:
            	case CUBE:
            	case ELEMENTS:
            	case EXPAND:
            	case EXPLICIT:
            	case FAST:
            	case FASTFIRSTROW:
            	case FORCE:
            	case HASH:
            	case KEEP:
            	case KEEPFIXED:
            	case LOOP:
            	case MAXDOP:
            	case MERGE:
            	case NOLOCK:
            	case PAGLOCK:
            	case RAW:
            	case READCOMMITED:
            	case READPAST:
            	case READUNCOMMITED:
            	case REMOTE:
            	case REPEATABLEREAD:
            	case ROBUST:
            	case ROLLUP:
            	case ROWLOCK:
            	case SERIALIZABLE:
            	case TABLOCK:
            	case TABLOCKX:
            	case TIES:
            	case UPDLOCK:
            	case VIEWS:
            	case XLOCK:
            	case XML:
            	case XMLDATA:
            		{
            	    alt84 = 3;
            	    }
            	    break;
            		default:
            		    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            		    NoViableAltException nvae_d84s0 =
            		        new NoViableAltException("", 84, 0, input);

            		    throw nvae_d84s0;
            	}

            	switch (alt84) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:750:11: identifier
            	        {
            	        	PushFollow(FOLLOW_identifier_in_alias16576);
            	        	identifier231 = identifier();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_identifier.Add(identifier231.Tree);


            	        	// AST REWRITE
            	        	// elements:          identifier
            	        	// token labels:      
            	        	// rule labels:       retval
            	        	// token list labels: 
            	        	// rule list labels:  
            	        	// wildcard labels: 
            	        	if ( (state.backtracking==0) ) {
            	        	retval.Tree = root_0;
            	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	        	root_0 = (CommonTree)adaptor.GetNilNode();
            	        	// 751:11: -> ^( ALIAS identifier )
            	        	{
            	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:751:14: ^( ALIAS identifier )
            	        	    {
            	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(ALIAS, "ALIAS"), root_1);

            	        	    adaptor.AddChild(root_1, stream_identifier.NextTree());

            	        	    adaptor.AddChild(root_0, root_1);
            	        	    }

            	        	}

            	        	retval.Tree = root_0;retval.Tree = root_0;}
            	        }
            	        break;
            	    case 2 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:752:11: stringLiteral
            	        {
            	        	PushFollow(FOLLOW_stringLiteral_in_alias16606);
            	        	stringLiteral232 = stringLiteral();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_stringLiteral.Add(stringLiteral232.Tree);


            	        	// AST REWRITE
            	        	// elements:          stringLiteral
            	        	// token labels:      
            	        	// rule labels:       retval
            	        	// token list labels: 
            	        	// rule list labels:  
            	        	// wildcard labels: 
            	        	if ( (state.backtracking==0) ) {
            	        	retval.Tree = root_0;
            	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	        	root_0 = (CommonTree)adaptor.GetNilNode();
            	        	// 753:9: -> ^( ALIAS stringLiteral )
            	        	{
            	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:753:12: ^( ALIAS stringLiteral )
            	        	    {
            	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(ALIAS, "ALIAS"), root_1);

            	        	    adaptor.AddChild(root_1, stream_stringLiteral.NextTree());

            	        	    adaptor.AddChild(root_0, root_1);
            	        	    }

            	        	}

            	        	retval.Tree = root_0;retval.Tree = root_0;}
            	        }
            	        break;
            	    case 3 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:754:11: keywordAsIdentifier
            	        {
            	        	PushFollow(FOLLOW_keywordAsIdentifier_in_alias16634);
            	        	keywordAsIdentifier233 = keywordAsIdentifier();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_keywordAsIdentifier.Add(keywordAsIdentifier233.Tree);


            	        	// AST REWRITE
            	        	// elements:          keywordAsIdentifier
            	        	// token labels:      
            	        	// rule labels:       retval
            	        	// token list labels: 
            	        	// rule list labels:  
            	        	// wildcard labels: 
            	        	if ( (state.backtracking==0) ) {
            	        	retval.Tree = root_0;
            	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	        	root_0 = (CommonTree)adaptor.GetNilNode();
            	        	// 755:9: -> ^( ALIAS keywordAsIdentifier )
            	        	{
            	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:755:12: ^( ALIAS keywordAsIdentifier )
            	        	    {
            	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(ALIAS, "ALIAS"), root_1);

            	        	    adaptor.AddChild(root_1, stream_keywordAsIdentifier.NextTree());

            	        	    adaptor.AddChild(root_0, root_1);
            	        	    }

            	        	}

            	        	retval.Tree = root_0;retval.Tree = root_0;}
            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 34, alias1_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "alias1"

    public class alias2_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "alias2"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:759:1: alias2 : ( identifier -> ^( ALIAS identifier ) | stringLiteral -> ^( ALIAS stringLiteral ) | keywordAsIdentifier -> ^( ALIAS keywordAsIdentifier ) ) ASSIGNEQUAL ;
    public SqlParser.alias2_return alias2() // throws RecognitionException [1]
    {   
        SqlParser.alias2_return retval = new SqlParser.alias2_return();
        retval.Start = input.LT(1);
        int alias2_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken ASSIGNEQUAL237 = null;
        SqlParser.identifier_return identifier234 = default(SqlParser.identifier_return);

        SqlParser.stringLiteral_return stringLiteral235 = default(SqlParser.stringLiteral_return);

        SqlParser.keywordAsIdentifier_return keywordAsIdentifier236 = default(SqlParser.keywordAsIdentifier_return);


        CommonTree ASSIGNEQUAL237_tree=null;
        RewriteRuleTokenStream stream_ASSIGNEQUAL = new RewriteRuleTokenStream(adaptor,"token ASSIGNEQUAL");
        RewriteRuleSubtreeStream stream_keywordAsIdentifier = new RewriteRuleSubtreeStream(adaptor,"rule keywordAsIdentifier");
        RewriteRuleSubtreeStream stream_stringLiteral = new RewriteRuleSubtreeStream(adaptor,"rule stringLiteral");
        RewriteRuleSubtreeStream stream_identifier = new RewriteRuleSubtreeStream(adaptor,"rule identifier");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 35) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:760:5: ( ( identifier -> ^( ALIAS identifier ) | stringLiteral -> ^( ALIAS stringLiteral ) | keywordAsIdentifier -> ^( ALIAS keywordAsIdentifier ) ) ASSIGNEQUAL )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:761:5: ( identifier -> ^( ALIAS identifier ) | stringLiteral -> ^( ALIAS stringLiteral ) | keywordAsIdentifier -> ^( ALIAS keywordAsIdentifier ) ) ASSIGNEQUAL
            {
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:761:5: ( identifier -> ^( ALIAS identifier ) | stringLiteral -> ^( ALIAS stringLiteral ) | keywordAsIdentifier -> ^( ALIAS keywordAsIdentifier ) )
            	int alt85 = 3;
            	switch ( input.LA(1) ) 
            	{
            	case NonQuotedIdentifier:
            	case QuotedIdentifier:
            		{
            	    alt85 = 1;
            	    }
            	    break;
            	case UnicodeStringLiteral:
            	case ASCIIStringLiteral:
            		{
            	    alt85 = 2;
            	    }
            	    break;
            	case AUTO:
            	case BASE64:
            	case BINARY:
            	case CAST:
            	case CONCAT:
            	case CUBE:
            	case ELEMENTS:
            	case EXPAND:
            	case EXPLICIT:
            	case FAST:
            	case FASTFIRSTROW:
            	case FORCE:
            	case HASH:
            	case KEEP:
            	case KEEPFIXED:
            	case LOOP:
            	case MAXDOP:
            	case MERGE:
            	case NOLOCK:
            	case PAGLOCK:
            	case RAW:
            	case READCOMMITED:
            	case READPAST:
            	case READUNCOMMITED:
            	case REMOTE:
            	case REPEATABLEREAD:
            	case ROBUST:
            	case ROLLUP:
            	case ROWLOCK:
            	case SERIALIZABLE:
            	case TABLOCK:
            	case TABLOCKX:
            	case TIES:
            	case UPDLOCK:
            	case VIEWS:
            	case XLOCK:
            	case XML:
            	case XMLDATA:
            		{
            	    alt85 = 3;
            	    }
            	    break;
            		default:
            		    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            		    NoViableAltException nvae_d85s0 =
            		        new NoViableAltException("", 85, 0, input);

            		    throw nvae_d85s0;
            	}

            	switch (alt85) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:762:7: identifier
            	        {
            	        	PushFollow(FOLLOW_identifier_in_alias26689);
            	        	identifier234 = identifier();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_identifier.Add(identifier234.Tree);


            	        	// AST REWRITE
            	        	// elements:          identifier
            	        	// token labels:      
            	        	// rule labels:       retval
            	        	// token list labels: 
            	        	// rule list labels:  
            	        	// wildcard labels: 
            	        	if ( (state.backtracking==0) ) {
            	        	retval.Tree = root_0;
            	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	        	root_0 = (CommonTree)adaptor.GetNilNode();
            	        	// 763:7: -> ^( ALIAS identifier )
            	        	{
            	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:763:10: ^( ALIAS identifier )
            	        	    {
            	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(ALIAS, "ALIAS"), root_1);

            	        	    adaptor.AddChild(root_1, stream_identifier.NextTree());

            	        	    adaptor.AddChild(root_0, root_1);
            	        	    }

            	        	}

            	        	retval.Tree = root_0;retval.Tree = root_0;}
            	        }
            	        break;
            	    case 2 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:764:7: stringLiteral
            	        {
            	        	PushFollow(FOLLOW_stringLiteral_in_alias26711);
            	        	stringLiteral235 = stringLiteral();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_stringLiteral.Add(stringLiteral235.Tree);


            	        	// AST REWRITE
            	        	// elements:          stringLiteral
            	        	// token labels:      
            	        	// rule labels:       retval
            	        	// token list labels: 
            	        	// rule list labels:  
            	        	// wildcard labels: 
            	        	if ( (state.backtracking==0) ) {
            	        	retval.Tree = root_0;
            	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	        	root_0 = (CommonTree)adaptor.GetNilNode();
            	        	// 765:7: -> ^( ALIAS stringLiteral )
            	        	{
            	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:765:10: ^( ALIAS stringLiteral )
            	        	    {
            	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(ALIAS, "ALIAS"), root_1);

            	        	    adaptor.AddChild(root_1, stream_stringLiteral.NextTree());

            	        	    adaptor.AddChild(root_0, root_1);
            	        	    }

            	        	}

            	        	retval.Tree = root_0;retval.Tree = root_0;}
            	        }
            	        break;
            	    case 3 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:766:7: keywordAsIdentifier
            	        {
            	        	PushFollow(FOLLOW_keywordAsIdentifier_in_alias26733);
            	        	keywordAsIdentifier236 = keywordAsIdentifier();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_keywordAsIdentifier.Add(keywordAsIdentifier236.Tree);


            	        	// AST REWRITE
            	        	// elements:          keywordAsIdentifier
            	        	// token labels:      
            	        	// rule labels:       retval
            	        	// token list labels: 
            	        	// rule list labels:  
            	        	// wildcard labels: 
            	        	if ( (state.backtracking==0) ) {
            	        	retval.Tree = root_0;
            	        	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	        	root_0 = (CommonTree)adaptor.GetNilNode();
            	        	// 767:7: -> ^( ALIAS keywordAsIdentifier )
            	        	{
            	        	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:767:10: ^( ALIAS keywordAsIdentifier )
            	        	    {
            	        	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	        	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(ALIAS, "ALIAS"), root_1);

            	        	    adaptor.AddChild(root_1, stream_keywordAsIdentifier.NextTree());

            	        	    adaptor.AddChild(root_0, root_1);
            	        	    }

            	        	}

            	        	retval.Tree = root_0;retval.Tree = root_0;}
            	        }
            	        break;

            	}

            	ASSIGNEQUAL237=(IToken)Match(input,ASSIGNEQUAL,FOLLOW_ASSIGNEQUAL_in_alias26759); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_ASSIGNEQUAL.Add(ASSIGNEQUAL237);


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 35, alias2_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "alias2"

    public class tableColumns_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "tableColumns"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:772:1: tableColumns : dbObject DOT_STAR -> ^( TABLECOLS dbObject ) ;
    public SqlParser.tableColumns_return tableColumns() // throws RecognitionException [1]
    {   
        SqlParser.tableColumns_return retval = new SqlParser.tableColumns_return();
        retval.Start = input.LT(1);
        int tableColumns_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken DOT_STAR239 = null;
        SqlParser.dbObject_return dbObject238 = default(SqlParser.dbObject_return);


        CommonTree DOT_STAR239_tree=null;
        RewriteRuleTokenStream stream_DOT_STAR = new RewriteRuleTokenStream(adaptor,"token DOT_STAR");
        RewriteRuleSubtreeStream stream_dbObject = new RewriteRuleSubtreeStream(adaptor,"rule dbObject");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 36) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:773:5: ( dbObject DOT_STAR -> ^( TABLECOLS dbObject ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:773:6: dbObject DOT_STAR
            {
            	PushFollow(FOLLOW_dbObject_in_tableColumns6779);
            	dbObject238 = dbObject();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_dbObject.Add(dbObject238.Tree);
            	DOT_STAR239=(IToken)Match(input,DOT_STAR,FOLLOW_DOT_STAR_in_tableColumns6781); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_DOT_STAR.Add(DOT_STAR239);



            	// AST REWRITE
            	// elements:          dbObject
            	// token labels:      
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 774:5: -> ^( TABLECOLS dbObject )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:774:8: ^( TABLECOLS dbObject )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(TABLECOLS, "TABLECOLS"), root_1);

            	    adaptor.AddChild(root_1, stream_dbObject.NextTree());

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 36, tableColumns_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "tableColumns"

    public class column_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "column"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:777:1: column : ( PLUS )* ( dbObject | LPAREN column RPAREN ) ( collate )? ;
    public SqlParser.column_return column() // throws RecognitionException [1]
    {   
        SqlParser.column_return retval = new SqlParser.column_return();
        retval.Start = input.LT(1);
        int column_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken PLUS240 = null;
        IToken LPAREN242 = null;
        IToken RPAREN244 = null;
        SqlParser.dbObject_return dbObject241 = default(SqlParser.dbObject_return);

        SqlParser.column_return column243 = default(SqlParser.column_return);

        SqlParser.collate_return collate245 = default(SqlParser.collate_return);


        CommonTree PLUS240_tree=null;
        CommonTree LPAREN242_tree=null;
        CommonTree RPAREN244_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 37) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:778:5: ( ( PLUS )* ( dbObject | LPAREN column RPAREN ) ( collate )? )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:779:5: ( PLUS )* ( dbObject | LPAREN column RPAREN ) ( collate )?
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:779:5: ( PLUS )*
            	do 
            	{
            	    int alt86 = 2;
            	    int LA86_0 = input.LA(1);

            	    if ( (LA86_0 == PLUS) )
            	    {
            	        alt86 = 1;
            	    }


            	    switch (alt86) 
            		{
            			case 1 :
            			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:779:6: PLUS
            			    {
            			    	PLUS240=(IToken)Match(input,PLUS,FOLLOW_PLUS_in_column6815); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{PLUS240_tree = (CommonTree)adaptor.Create(PLUS240);
            			    		adaptor.AddChild(root_0, PLUS240_tree);
            			    	}

            			    }
            			    break;

            			default:
            			    goto loop86;
            	    }
            	} while (true);

            	loop86:
            		;	// Stops C# compiler whining that label 'loop86' has no statements

            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:780:5: ( dbObject | LPAREN column RPAREN )
            	int alt87 = 2;
            	int LA87_0 = input.LA(1);

            	if ( (LA87_0 == AUTO || LA87_0 == BASE64 || LA87_0 == BINARY || LA87_0 == CAST || LA87_0 == CONCAT || LA87_0 == CUBE || LA87_0 == ELEMENTS || (LA87_0 >= EXPAND && LA87_0 <= FASTFIRSTROW) || LA87_0 == FORCE || LA87_0 == HASH || LA87_0 == IDENTITYCOL || (LA87_0 >= KEEP && LA87_0 <= KEEPFIXED) || (LA87_0 >= LOOP && LA87_0 <= MERGE) || LA87_0 == NOLOCK || LA87_0 == PAGLOCK || LA87_0 == RAW || (LA87_0 >= READCOMMITED && LA87_0 <= READPAST) || LA87_0 == READUNCOMMITED || (LA87_0 >= REMOTE && LA87_0 <= REPEATABLEREAD) || LA87_0 == ROBUST || LA87_0 == ROLLUP || (LA87_0 >= ROWGUIDCOL && LA87_0 <= ROWLOCK) || LA87_0 == SERIALIZABLE || (LA87_0 >= TABLOCK && LA87_0 <= TABLOCKX) || LA87_0 == TIES || LA87_0 == UPDLOCK || LA87_0 == VIEWS || (LA87_0 >= XLOCK && LA87_0 <= XMLDATA) || (LA87_0 >= NonQuotedIdentifier && LA87_0 <= QuotedIdentifier)) )
            	{
            	    alt87 = 1;
            	}
            	else if ( (LA87_0 == LPAREN) )
            	{
            	    alt87 = 2;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d87s0 =
            	        new NoViableAltException("", 87, 0, input);

            	    throw nvae_d87s0;
            	}
            	switch (alt87) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:781:7: dbObject
            	        {
            	        	PushFollow(FOLLOW_dbObject_in_column6832);
            	        	dbObject241 = dbObject();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, dbObject241.Tree);

            	        }
            	        break;
            	    case 2 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:783:7: LPAREN column RPAREN
            	        {
            	        	LPAREN242=(IToken)Match(input,LPAREN,FOLLOW_LPAREN_in_column6847); if (state.failed) return retval;
            	        	PushFollow(FOLLOW_column_in_column6850);
            	        	column243 = column();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, column243.Tree);
            	        	RPAREN244=(IToken)Match(input,RPAREN,FOLLOW_RPAREN_in_column6852); if (state.failed) return retval;

            	        }
            	        break;

            	}

            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:785:5: ( collate )?
            	int alt88 = 2;
            	alt88 = dfa88.Predict(input);
            	switch (alt88) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:785:6: collate
            	        {
            	        	PushFollow(FOLLOW_collate_in_column6866);
            	        	collate245 = collate();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, collate245.Tree);

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 37, column_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "column"

    public class expression_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "expression"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:795:1: expression : arithMultsOp ( ( PLUS | MINUS | AMPERSAND | BITWISEOR | BITWISEXOR ) arithMultsOp )* ;
    public SqlParser.expression_return expression() // throws RecognitionException [1]
    {   
        SqlParser.expression_return retval = new SqlParser.expression_return();
        retval.Start = input.LT(1);
        int expression_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken set247 = null;
        SqlParser.arithMultsOp_return arithMultsOp246 = default(SqlParser.arithMultsOp_return);

        SqlParser.arithMultsOp_return arithMultsOp248 = default(SqlParser.arithMultsOp_return);


        CommonTree set247_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 38) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:796:5: ( arithMultsOp ( ( PLUS | MINUS | AMPERSAND | BITWISEOR | BITWISEXOR ) arithMultsOp )* )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:796:7: arithMultsOp ( ( PLUS | MINUS | AMPERSAND | BITWISEOR | BITWISEXOR ) arithMultsOp )*
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	PushFollow(FOLLOW_arithMultsOp_in_expression6889);
            	arithMultsOp246 = arithMultsOp();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, arithMultsOp246.Tree);
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:796:20: ( ( PLUS | MINUS | AMPERSAND | BITWISEOR | BITWISEXOR ) arithMultsOp )*
            	do 
            	{
            	    int alt89 = 2;
            	    alt89 = dfa89.Predict(input);
            	    switch (alt89) 
            		{
            			case 1 :
            			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:796:22: ( PLUS | MINUS | AMPERSAND | BITWISEOR | BITWISEXOR ) arithMultsOp
            			    {
            			    	set247=(IToken)input.LT(1);
            			    	set247 = (IToken)input.LT(1);
            			    	if ( (input.LA(1) >= PLUS && input.LA(1) <= BITWISEXOR) ) 
            			    	{
            			    	    input.Consume();
            			    	    if ( state.backtracking == 0 ) root_0 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(set247), root_0);
            			    	    state.errorRecovery = false;state.failed = false;
            			    	}
            			    	else 
            			    	{
            			    	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            			    	    MismatchedSetException mse = new MismatchedSetException(null,input);
            			    	    throw mse;
            			    	}

            			    	PushFollow(FOLLOW_arithMultsOp_in_expression6916);
            			    	arithMultsOp248 = arithMultsOp();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, arithMultsOp248.Tree);

            			    }
            			    break;

            			default:
            			    goto loop89;
            	    }
            	} while (true);

            	loop89:
            		;	// Stops C# compiler whining that label 'loop89' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 38, expression_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "expression"

    public class arithMultsOp_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "arithMultsOp"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:800:1: arithMultsOp : unaryExpr ( ( STAR | DIVIDE | MOD ) unaryExpr )* ;
    public SqlParser.arithMultsOp_return arithMultsOp() // throws RecognitionException [1]
    {   
        SqlParser.arithMultsOp_return retval = new SqlParser.arithMultsOp_return();
        retval.Start = input.LT(1);
        int arithMultsOp_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken set250 = null;
        SqlParser.unaryExpr_return unaryExpr249 = default(SqlParser.unaryExpr_return);

        SqlParser.unaryExpr_return unaryExpr251 = default(SqlParser.unaryExpr_return);


        CommonTree set250_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 39) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:801:5: ( unaryExpr ( ( STAR | DIVIDE | MOD ) unaryExpr )* )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:801:7: unaryExpr ( ( STAR | DIVIDE | MOD ) unaryExpr )*
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	PushFollow(FOLLOW_unaryExpr_in_arithMultsOp6937);
            	unaryExpr249 = unaryExpr();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, unaryExpr249.Tree);
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:801:17: ( ( STAR | DIVIDE | MOD ) unaryExpr )*
            	do 
            	{
            	    int alt90 = 2;
            	    alt90 = dfa90.Predict(input);
            	    switch (alt90) 
            		{
            			case 1 :
            			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:801:18: ( STAR | DIVIDE | MOD ) unaryExpr
            			    {
            			    	set250=(IToken)input.LT(1);
            			    	set250 = (IToken)input.LT(1);
            			    	if ( input.LA(1) == STAR || (input.LA(1) >= DIVIDE && input.LA(1) <= MOD) ) 
            			    	{
            			    	    input.Consume();
            			    	    if ( state.backtracking == 0 ) root_0 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(set250), root_0);
            			    	    state.errorRecovery = false;state.failed = false;
            			    	}
            			    	else 
            			    	{
            			    	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            			    	    MismatchedSetException mse = new MismatchedSetException(null,input);
            			    	    throw mse;
            			    	}

            			    	PushFollow(FOLLOW_unaryExpr_in_arithMultsOp6954);
            			    	unaryExpr251 = unaryExpr();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, unaryExpr251.Tree);

            			    }
            			    break;

            			default:
            			    goto loop90;
            	    }
            	} while (true);

            	loop90:
            		;	// Stops C# compiler whining that label 'loop90' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 39, arithMultsOp_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "arithMultsOp"

    public class unaryExpr_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "unaryExpr"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:804:1: unaryExpr : ( unaryOperator subExpression | subExpression );
    public SqlParser.unaryExpr_return unaryExpr() // throws RecognitionException [1]
    {   
        SqlParser.unaryExpr_return retval = new SqlParser.unaryExpr_return();
        retval.Start = input.LT(1);
        int unaryExpr_StartIndex = input.Index();
        CommonTree root_0 = null;

        SqlParser.unaryOperator_return unaryOperator252 = default(SqlParser.unaryOperator_return);

        SqlParser.subExpression_return subExpression253 = default(SqlParser.subExpression_return);

        SqlParser.subExpression_return subExpression254 = default(SqlParser.subExpression_return);



        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 40) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:805:5: ( unaryOperator subExpression | subExpression )
            int alt91 = 2;
            alt91 = dfa91.Predict(input);
            switch (alt91) 
            {
                case 1 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:805:7: unaryOperator subExpression
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_unaryOperator_in_unaryExpr6973);
                    	unaryOperator252 = unaryOperator();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) root_0 = (CommonTree)adaptor.BecomeRoot(unaryOperator252.Tree, root_0);
                    	PushFollow(FOLLOW_subExpression_in_unaryExpr6976);
                    	subExpression253 = subExpression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, subExpression253.Tree);

                    }
                    break;
                case 2 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:806:7: subExpression
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_subExpression_in_unaryExpr6984);
                    	subExpression254 = subExpression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, subExpression254.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 40, unaryExpr_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "unaryExpr"

    public class subExpression_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "subExpression"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:809:1: subExpression : ( caseFunction | castFunction | parameterlessFunction | constantExpr | Variable | ( function )=> function | LPAREN ( ( selectStatement )=> selectStatement | expression ) RPAREN | dbObject ) ( collate )? ;
    public SqlParser.subExpression_return subExpression() // throws RecognitionException [1]
    {   
        SqlParser.subExpression_return retval = new SqlParser.subExpression_return();
        retval.Start = input.LT(1);
        int subExpression_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken Variable259 = null;
        IToken LPAREN261 = null;
        IToken RPAREN264 = null;
        SqlParser.caseFunction_return caseFunction255 = default(SqlParser.caseFunction_return);

        SqlParser.castFunction_return castFunction256 = default(SqlParser.castFunction_return);

        SqlParser.parameterlessFunction_return parameterlessFunction257 = default(SqlParser.parameterlessFunction_return);

        SqlParser.constantExpr_return constantExpr258 = default(SqlParser.constantExpr_return);

        SqlParser.function_return function260 = default(SqlParser.function_return);

        SqlParser.selectStatement_return selectStatement262 = default(SqlParser.selectStatement_return);

        SqlParser.expression_return expression263 = default(SqlParser.expression_return);

        SqlParser.dbObject_return dbObject265 = default(SqlParser.dbObject_return);

        SqlParser.collate_return collate266 = default(SqlParser.collate_return);


        CommonTree Variable259_tree=null;
        CommonTree LPAREN261_tree=null;
        CommonTree RPAREN264_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 41) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:810:5: ( ( caseFunction | castFunction | parameterlessFunction | constantExpr | Variable | ( function )=> function | LPAREN ( ( selectStatement )=> selectStatement | expression ) RPAREN | dbObject ) ( collate )? )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:812:5: ( caseFunction | castFunction | parameterlessFunction | constantExpr | Variable | ( function )=> function | LPAREN ( ( selectStatement )=> selectStatement | expression ) RPAREN | dbObject ) ( collate )?
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:812:5: ( caseFunction | castFunction | parameterlessFunction | constantExpr | Variable | ( function )=> function | LPAREN ( ( selectStatement )=> selectStatement | expression ) RPAREN | dbObject )
            	int alt93 = 8;
            	alt93 = dfa93.Predict(input);
            	switch (alt93) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:813:7: caseFunction
            	        {
            	        	PushFollow(FOLLOW_caseFunction_in_subExpression7014);
            	        	caseFunction255 = caseFunction();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, caseFunction255.Tree);

            	        }
            	        break;
            	    case 2 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:814:7: castFunction
            	        {
            	        	PushFollow(FOLLOW_castFunction_in_subExpression7022);
            	        	castFunction256 = castFunction();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, castFunction256.Tree);

            	        }
            	        break;
            	    case 3 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:815:7: parameterlessFunction
            	        {
            	        	PushFollow(FOLLOW_parameterlessFunction_in_subExpression7030);
            	        	parameterlessFunction257 = parameterlessFunction();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, parameterlessFunction257.Tree);

            	        }
            	        break;
            	    case 4 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:816:7: constantExpr
            	        {
            	        	PushFollow(FOLLOW_constantExpr_in_subExpression7038);
            	        	constantExpr258 = constantExpr();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, constantExpr258.Tree);

            	        }
            	        break;
            	    case 5 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:817:7: Variable
            	        {
            	        	Variable259=(IToken)Match(input,Variable,FOLLOW_Variable_in_subExpression7046); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{Variable259_tree = (CommonTree)adaptor.Create(Variable259);
            	        		adaptor.AddChild(root_0, Variable259_tree);
            	        	}

            	        }
            	        break;
            	    case 6 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:818:7: ( function )=> function
            	        {
            	        	PushFollow(FOLLOW_function_in_subExpression7060);
            	        	function260 = function();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, function260.Tree);

            	        }
            	        break;
            	    case 7 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:819:7: LPAREN ( ( selectStatement )=> selectStatement | expression ) RPAREN
            	        {
            	        	LPAREN261=(IToken)Match(input,LPAREN,FOLLOW_LPAREN_in_subExpression7068); if (state.failed) return retval;
            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:819:15: ( ( selectStatement )=> selectStatement | expression )
            	        	int alt92 = 2;
            	        	alt92 = dfa92.Predict(input);
            	        	switch (alt92) 
            	        	{
            	        	    case 1 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:820:11: ( selectStatement )=> selectStatement
            	        	        {
            	        	        	PushFollow(FOLLOW_selectStatement_in_subExpression7089);
            	        	        	selectStatement262 = selectStatement();
            	        	        	state.followingStackPointer--;
            	        	        	if (state.failed) return retval;
            	        	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, selectStatement262.Tree);
            	        	        	if ( (state.backtracking==0) )
            	        	        	{

            	        	        	              if ( ((selectStatement262 != null) ? selectStatement262.result : default(SqlQuery)) != null ) 
            	        	        	                  ((QueryScope_scope)QueryScope_stack.Peek()).current.addSubQuery(((selectStatement262 != null) ? selectStatement262.result : default(SqlQuery)));
            	        	        	            
            	        	        	}

            	        	        }
            	        	        break;
            	        	    case 2 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:825:11: expression
            	        	        {
            	        	        	PushFollow(FOLLOW_expression_in_subExpression7114);
            	        	        	expression263 = expression();
            	        	        	state.followingStackPointer--;
            	        	        	if (state.failed) return retval;
            	        	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, expression263.Tree);

            	        	        }
            	        	        break;

            	        	}

            	        	RPAREN264=(IToken)Match(input,RPAREN,FOLLOW_RPAREN_in_subExpression7126); if (state.failed) return retval;

            	        }
            	        break;
            	    case 8 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:827:7: dbObject
            	        {
            	        	PushFollow(FOLLOW_dbObject_in_subExpression7135);
            	        	dbObject265 = dbObject();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, dbObject265.Tree);

            	        }
            	        break;

            	}

            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:829:5: ( collate )?
            	int alt94 = 2;
            	alt94 = dfa94.Predict(input);
            	switch (alt94) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:829:6: collate
            	        {
            	        	PushFollow(FOLLOW_collate_in_subExpression7152);
            	        	collate266 = collate();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, collate266.Tree);

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 41, subExpression_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "subExpression"

    public class varAssign_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "varAssign"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:835:1: varAssign : Variable ASSIGNEQUAL expression -> ^( VARASSIGN Variable expression ) ;
    public SqlParser.varAssign_return varAssign() // throws RecognitionException [1]
    {   
        SqlParser.varAssign_return retval = new SqlParser.varAssign_return();
        retval.Start = input.LT(1);
        int varAssign_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken Variable267 = null;
        IToken ASSIGNEQUAL268 = null;
        SqlParser.expression_return expression269 = default(SqlParser.expression_return);


        CommonTree Variable267_tree=null;
        CommonTree ASSIGNEQUAL268_tree=null;
        RewriteRuleTokenStream stream_Variable = new RewriteRuleTokenStream(adaptor,"token Variable");
        RewriteRuleTokenStream stream_ASSIGNEQUAL = new RewriteRuleTokenStream(adaptor,"token ASSIGNEQUAL");
        RewriteRuleSubtreeStream stream_expression = new RewriteRuleSubtreeStream(adaptor,"rule expression");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 42) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:836:5: ( Variable ASSIGNEQUAL expression -> ^( VARASSIGN Variable expression ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:836:7: Variable ASSIGNEQUAL expression
            {
            	Variable267=(IToken)Match(input,Variable,FOLLOW_Variable_in_varAssign7178); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_Variable.Add(Variable267);

            	ASSIGNEQUAL268=(IToken)Match(input,ASSIGNEQUAL,FOLLOW_ASSIGNEQUAL_in_varAssign7180); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_ASSIGNEQUAL.Add(ASSIGNEQUAL268);

            	PushFollow(FOLLOW_expression_in_varAssign7182);
            	expression269 = expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_expression.Add(expression269.Tree);


            	// AST REWRITE
            	// elements:          Variable, expression
            	// token labels:      
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 837:5: -> ^( VARASSIGN Variable expression )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:837:8: ^( VARASSIGN Variable expression )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(VARASSIGN, "VARASSIGN"), root_1);

            	    adaptor.AddChild(root_1, stream_Variable.NextNode());
            	    adaptor.AddChild(root_1, stream_expression.NextTree());

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 42, varAssign_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "varAssign"

    public class functionArg_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "functionArg"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:840:1: functionArg : ( expression ( COMMA expression )* -> ^( ARG ( expression )+ ) | STAR -> ^( ARG STAR ) | (mod= ALL | mod= DISTINCT ) ( STAR | expression ) -> ^( ARG $mod ( STAR )? ( expression )? ) | varAssign ( COMMA varAssign )* -> ^( ARG ( varAssign )+ ) );
    public SqlParser.functionArg_return functionArg() // throws RecognitionException [1]
    {   
        SqlParser.functionArg_return retval = new SqlParser.functionArg_return();
        retval.Start = input.LT(1);
        int functionArg_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken mod = null;
        IToken COMMA271 = null;
        IToken STAR273 = null;
        IToken STAR274 = null;
        IToken COMMA277 = null;
        SqlParser.expression_return expression270 = default(SqlParser.expression_return);

        SqlParser.expression_return expression272 = default(SqlParser.expression_return);

        SqlParser.expression_return expression275 = default(SqlParser.expression_return);

        SqlParser.varAssign_return varAssign276 = default(SqlParser.varAssign_return);

        SqlParser.varAssign_return varAssign278 = default(SqlParser.varAssign_return);


        CommonTree mod_tree=null;
        CommonTree COMMA271_tree=null;
        CommonTree STAR273_tree=null;
        CommonTree STAR274_tree=null;
        CommonTree COMMA277_tree=null;
        RewriteRuleTokenStream stream_STAR = new RewriteRuleTokenStream(adaptor,"token STAR");
        RewriteRuleTokenStream stream_COMMA = new RewriteRuleTokenStream(adaptor,"token COMMA");
        RewriteRuleTokenStream stream_DISTINCT = new RewriteRuleTokenStream(adaptor,"token DISTINCT");
        RewriteRuleTokenStream stream_ALL = new RewriteRuleTokenStream(adaptor,"token ALL");
        RewriteRuleSubtreeStream stream_expression = new RewriteRuleSubtreeStream(adaptor,"rule expression");
        RewriteRuleSubtreeStream stream_varAssign = new RewriteRuleSubtreeStream(adaptor,"rule varAssign");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 43) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:841:5: ( expression ( COMMA expression )* -> ^( ARG ( expression )+ ) | STAR -> ^( ARG STAR ) | (mod= ALL | mod= DISTINCT ) ( STAR | expression ) -> ^( ARG $mod ( STAR )? ( expression )? ) | varAssign ( COMMA varAssign )* -> ^( ARG ( varAssign )+ ) )
            int alt99 = 4;
            alt99 = dfa99.Predict(input);
            switch (alt99) 
            {
                case 1 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:841:7: expression ( COMMA expression )*
                    {
                    	PushFollow(FOLLOW_expression_in_functionArg7213);
                    	expression270 = expression();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( (state.backtracking==0) ) stream_expression.Add(expression270.Tree);
                    	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:841:18: ( COMMA expression )*
                    	do 
                    	{
                    	    int alt95 = 2;
                    	    int LA95_0 = input.LA(1);

                    	    if ( (LA95_0 == COMMA) )
                    	    {
                    	        alt95 = 1;
                    	    }


                    	    switch (alt95) 
                    		{
                    			case 1 :
                    			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:841:19: COMMA expression
                    			    {
                    			    	COMMA271=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_functionArg7216); if (state.failed) return retval; 
                    			    	if ( (state.backtracking==0) ) stream_COMMA.Add(COMMA271);

                    			    	PushFollow(FOLLOW_expression_in_functionArg7218);
                    			    	expression272 = expression();
                    			    	state.followingStackPointer--;
                    			    	if (state.failed) return retval;
                    			    	if ( (state.backtracking==0) ) stream_expression.Add(expression272.Tree);

                    			    }
                    			    break;

                    			default:
                    			    goto loop95;
                    	    }
                    	} while (true);

                    	loop95:
                    		;	// Stops C# compiler whining that label 'loop95' has no statements



                    	// AST REWRITE
                    	// elements:          expression
                    	// token labels:      
                    	// rule labels:       retval
                    	// token list labels: 
                    	// rule list labels:  
                    	// wildcard labels: 
                    	if ( (state.backtracking==0) ) {
                    	retval.Tree = root_0;
                    	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	root_0 = (CommonTree)adaptor.GetNilNode();
                    	// 842:5: -> ^( ARG ( expression )+ )
                    	{
                    	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:842:8: ^( ARG ( expression )+ )
                    	    {
                    	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
                    	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(ARG, "ARG"), root_1);

                    	    if ( !(stream_expression.HasNext()) ) {
                    	        throw new RewriteEarlyExitException();
                    	    }
                    	    while ( stream_expression.HasNext() )
                    	    {
                    	        adaptor.AddChild(root_1, stream_expression.NextTree());

                    	    }
                    	    stream_expression.Reset();

                    	    adaptor.AddChild(root_0, root_1);
                    	    }

                    	}

                    	retval.Tree = root_0;retval.Tree = root_0;}
                    }
                    break;
                case 2 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:843:7: STAR
                    {
                    	STAR273=(IToken)Match(input,STAR,FOLLOW_STAR_in_functionArg7241); if (state.failed) return retval; 
                    	if ( (state.backtracking==0) ) stream_STAR.Add(STAR273);



                    	// AST REWRITE
                    	// elements:          STAR
                    	// token labels:      
                    	// rule labels:       retval
                    	// token list labels: 
                    	// rule list labels:  
                    	// wildcard labels: 
                    	if ( (state.backtracking==0) ) {
                    	retval.Tree = root_0;
                    	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	root_0 = (CommonTree)adaptor.GetNilNode();
                    	// 844:5: -> ^( ARG STAR )
                    	{
                    	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:844:8: ^( ARG STAR )
                    	    {
                    	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
                    	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(ARG, "ARG"), root_1);

                    	    adaptor.AddChild(root_1, stream_STAR.NextNode());

                    	    adaptor.AddChild(root_0, root_1);
                    	    }

                    	}

                    	retval.Tree = root_0;retval.Tree = root_0;}
                    }
                    break;
                case 3 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:845:7: (mod= ALL | mod= DISTINCT ) ( STAR | expression )
                    {
                    	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:845:7: (mod= ALL | mod= DISTINCT )
                    	int alt96 = 2;
                    	int LA96_0 = input.LA(1);

                    	if ( (LA96_0 == ALL) )
                    	{
                    	    alt96 = 1;
                    	}
                    	else if ( (LA96_0 == DISTINCT) )
                    	{
                    	    alt96 = 2;
                    	}
                    	else 
                    	{
                    	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    	    NoViableAltException nvae_d96s0 =
                    	        new NoViableAltException("", 96, 0, input);

                    	    throw nvae_d96s0;
                    	}
                    	switch (alt96) 
                    	{
                    	    case 1 :
                    	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:845:8: mod= ALL
                    	        {
                    	        	mod=(IToken)Match(input,ALL,FOLLOW_ALL_in_functionArg7264); if (state.failed) return retval; 
                    	        	if ( (state.backtracking==0) ) stream_ALL.Add(mod);


                    	        }
                    	        break;
                    	    case 2 :
                    	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:845:18: mod= DISTINCT
                    	        {
                    	        	mod=(IToken)Match(input,DISTINCT,FOLLOW_DISTINCT_in_functionArg7270); if (state.failed) return retval; 
                    	        	if ( (state.backtracking==0) ) stream_DISTINCT.Add(mod);


                    	        }
                    	        break;

                    	}

                    	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:845:32: ( STAR | expression )
                    	int alt97 = 2;
                    	alt97 = dfa97.Predict(input);
                    	switch (alt97) 
                    	{
                    	    case 1 :
                    	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:845:33: STAR
                    	        {
                    	        	STAR274=(IToken)Match(input,STAR,FOLLOW_STAR_in_functionArg7274); if (state.failed) return retval; 
                    	        	if ( (state.backtracking==0) ) stream_STAR.Add(STAR274);


                    	        }
                    	        break;
                    	    case 2 :
                    	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:845:40: expression
                    	        {
                    	        	PushFollow(FOLLOW_expression_in_functionArg7278);
                    	        	expression275 = expression();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( (state.backtracking==0) ) stream_expression.Add(expression275.Tree);

                    	        }
                    	        break;

                    	}



                    	// AST REWRITE
                    	// elements:          expression, STAR, mod
                    	// token labels:      mod
                    	// rule labels:       retval
                    	// token list labels: 
                    	// rule list labels:  
                    	// wildcard labels: 
                    	if ( (state.backtracking==0) ) {
                    	retval.Tree = root_0;
                    	RewriteRuleTokenStream stream_mod = new RewriteRuleTokenStream(adaptor, "token mod", mod);
                    	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	root_0 = (CommonTree)adaptor.GetNilNode();
                    	// 846:5: -> ^( ARG $mod ( STAR )? ( expression )? )
                    	{
                    	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:846:8: ^( ARG $mod ( STAR )? ( expression )? )
                    	    {
                    	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
                    	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(ARG, "ARG"), root_1);

                    	    adaptor.AddChild(root_1, stream_mod.NextNode());
                    	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:846:19: ( STAR )?
                    	    if ( stream_STAR.HasNext() )
                    	    {
                    	        adaptor.AddChild(root_1, stream_STAR.NextNode());

                    	    }
                    	    stream_STAR.Reset();
                    	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:846:25: ( expression )?
                    	    if ( stream_expression.HasNext() )
                    	    {
                    	        adaptor.AddChild(root_1, stream_expression.NextTree());

                    	    }
                    	    stream_expression.Reset();

                    	    adaptor.AddChild(root_0, root_1);
                    	    }

                    	}

                    	retval.Tree = root_0;retval.Tree = root_0;}
                    }
                    break;
                case 4 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:847:7: varAssign ( COMMA varAssign )*
                    {
                    	PushFollow(FOLLOW_varAssign_in_functionArg7306);
                    	varAssign276 = varAssign();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( (state.backtracking==0) ) stream_varAssign.Add(varAssign276.Tree);
                    	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:847:17: ( COMMA varAssign )*
                    	do 
                    	{
                    	    int alt98 = 2;
                    	    int LA98_0 = input.LA(1);

                    	    if ( (LA98_0 == COMMA) )
                    	    {
                    	        alt98 = 1;
                    	    }


                    	    switch (alt98) 
                    		{
                    			case 1 :
                    			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:847:18: COMMA varAssign
                    			    {
                    			    	COMMA277=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_functionArg7309); if (state.failed) return retval; 
                    			    	if ( (state.backtracking==0) ) stream_COMMA.Add(COMMA277);

                    			    	PushFollow(FOLLOW_varAssign_in_functionArg7311);
                    			    	varAssign278 = varAssign();
                    			    	state.followingStackPointer--;
                    			    	if (state.failed) return retval;
                    			    	if ( (state.backtracking==0) ) stream_varAssign.Add(varAssign278.Tree);

                    			    }
                    			    break;

                    			default:
                    			    goto loop98;
                    	    }
                    	} while (true);

                    	loop98:
                    		;	// Stops C# compiler whining that label 'loop98' has no statements



                    	// AST REWRITE
                    	// elements:          varAssign
                    	// token labels:      
                    	// rule labels:       retval
                    	// token list labels: 
                    	// rule list labels:  
                    	// wildcard labels: 
                    	if ( (state.backtracking==0) ) {
                    	retval.Tree = root_0;
                    	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	root_0 = (CommonTree)adaptor.GetNilNode();
                    	// 848:5: -> ^( ARG ( varAssign )+ )
                    	{
                    	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:848:8: ^( ARG ( varAssign )+ )
                    	    {
                    	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
                    	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(ARG, "ARG"), root_1);

                    	    if ( !(stream_varAssign.HasNext()) ) {
                    	        throw new RewriteEarlyExitException();
                    	    }
                    	    while ( stream_varAssign.HasNext() )
                    	    {
                    	        adaptor.AddChild(root_1, stream_varAssign.NextTree());

                    	    }
                    	    stream_varAssign.Reset();

                    	    adaptor.AddChild(root_0, root_1);
                    	    }

                    	}

                    	retval.Tree = root_0;retval.Tree = root_0;}
                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 43, functionArg_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "functionArg"

    public class function_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "function"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:851:1: function : ( LEFT | RIGHT | fn= dbObject ) LPAREN (arg= functionArg )? RPAREN -> { $arg.text == null }? ^( FUNCTION $fn NOARG ) -> ^( FUNCTION ( $fn)? ( LEFT )? ( RIGHT )? functionArg ) ;
    public SqlParser.function_return function() // throws RecognitionException [1]
    {   
        SqlParser.function_return retval = new SqlParser.function_return();
        retval.Start = input.LT(1);
        int function_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken LEFT279 = null;
        IToken RIGHT280 = null;
        IToken LPAREN281 = null;
        IToken RPAREN282 = null;
        SqlParser.dbObject_return fn = default(SqlParser.dbObject_return);

        SqlParser.functionArg_return arg = default(SqlParser.functionArg_return);


        CommonTree LEFT279_tree=null;
        CommonTree RIGHT280_tree=null;
        CommonTree LPAREN281_tree=null;
        CommonTree RPAREN282_tree=null;
        RewriteRuleTokenStream stream_RPAREN = new RewriteRuleTokenStream(adaptor,"token RPAREN");
        RewriteRuleTokenStream stream_RIGHT = new RewriteRuleTokenStream(adaptor,"token RIGHT");
        RewriteRuleTokenStream stream_LEFT = new RewriteRuleTokenStream(adaptor,"token LEFT");
        RewriteRuleTokenStream stream_LPAREN = new RewriteRuleTokenStream(adaptor,"token LPAREN");
        RewriteRuleSubtreeStream stream_dbObject = new RewriteRuleSubtreeStream(adaptor,"rule dbObject");
        RewriteRuleSubtreeStream stream_functionArg = new RewriteRuleSubtreeStream(adaptor,"rule functionArg");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 44) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:852:5: ( ( LEFT | RIGHT | fn= dbObject ) LPAREN (arg= functionArg )? RPAREN -> { $arg.text == null }? ^( FUNCTION $fn NOARG ) -> ^( FUNCTION ( $fn)? ( LEFT )? ( RIGHT )? functionArg ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:857:5: ( LEFT | RIGHT | fn= dbObject ) LPAREN (arg= functionArg )? RPAREN
            {
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:857:5: ( LEFT | RIGHT | fn= dbObject )
            	int alt100 = 3;
            	switch ( input.LA(1) ) 
            	{
            	case LEFT:
            		{
            	    alt100 = 1;
            	    }
            	    break;
            	case RIGHT:
            		{
            	    alt100 = 2;
            	    }
            	    break;
            	case AUTO:
            	case BASE64:
            	case BINARY:
            	case CAST:
            	case CONCAT:
            	case CUBE:
            	case ELEMENTS:
            	case EXPAND:
            	case EXPLICIT:
            	case FAST:
            	case FASTFIRSTROW:
            	case FORCE:
            	case HASH:
            	case IDENTITYCOL:
            	case KEEP:
            	case KEEPFIXED:
            	case LOOP:
            	case MAXDOP:
            	case MERGE:
            	case NOLOCK:
            	case PAGLOCK:
            	case RAW:
            	case READCOMMITED:
            	case READPAST:
            	case READUNCOMMITED:
            	case REMOTE:
            	case REPEATABLEREAD:
            	case ROBUST:
            	case ROLLUP:
            	case ROWGUIDCOL:
            	case ROWLOCK:
            	case SERIALIZABLE:
            	case TABLOCK:
            	case TABLOCKX:
            	case TIES:
            	case UPDLOCK:
            	case VIEWS:
            	case XLOCK:
            	case XML:
            	case XMLDATA:
            	case NonQuotedIdentifier:
            	case QuotedIdentifier:
            		{
            	    alt100 = 3;
            	    }
            	    break;
            		default:
            		    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            		    NoViableAltException nvae_d100s0 =
            		        new NoViableAltException("", 100, 0, input);

            		    throw nvae_d100s0;
            	}

            	switch (alt100) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:857:6: LEFT
            	        {
            	        	LEFT279=(IToken)Match(input,LEFT,FOLLOW_LEFT_in_function7364); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_LEFT.Add(LEFT279);


            	        }
            	        break;
            	    case 2 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:857:13: RIGHT
            	        {
            	        	RIGHT280=(IToken)Match(input,RIGHT,FOLLOW_RIGHT_in_function7368); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_RIGHT.Add(RIGHT280);


            	        }
            	        break;
            	    case 3 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:857:21: fn= dbObject
            	        {
            	        	PushFollow(FOLLOW_dbObject_in_function7374);
            	        	fn = dbObject();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_dbObject.Add(fn.Tree);

            	        }
            	        break;

            	}

            	LPAREN281=(IToken)Match(input,LPAREN,FOLLOW_LPAREN_in_function7377); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_LPAREN.Add(LPAREN281);

            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:864:12: (arg= functionArg )?
            	int alt101 = 2;
            	alt101 = dfa101.Predict(input);
            	switch (alt101) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:0:0: arg= functionArg
            	        {
            	        	PushFollow(FOLLOW_functionArg_in_function7396);
            	        	arg = functionArg();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_functionArg.Add(arg.Tree);

            	        }
            	        break;

            	}

            	RPAREN282=(IToken)Match(input,RPAREN,FOLLOW_RPAREN_in_function7403); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_RPAREN.Add(RPAREN282);



            	// AST REWRITE
            	// elements:          fn, fn, LEFT, functionArg, RIGHT
            	// token labels:      
            	// rule labels:       retval, fn
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);
            	RewriteRuleSubtreeStream stream_fn = new RewriteRuleSubtreeStream(adaptor, "rule fn", fn!=null ? fn.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 866:5: -> { $arg.text == null }? ^( FUNCTION $fn NOARG )
            	if ( ((arg != null) ? input.ToString((IToken)(arg.Start),(IToken)(arg.Stop)) : null) == null )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:866:31: ^( FUNCTION $fn NOARG )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(FUNCTION, "FUNCTION"), root_1);

            	    adaptor.AddChild(root_1, stream_fn.NextTree());
            	    adaptor.AddChild(root_1, (CommonTree)adaptor.Create(NOARG, "NOARG"));

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}
            	else // 867:5: -> ^( FUNCTION ( $fn)? ( LEFT )? ( RIGHT )? functionArg )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:867:8: ^( FUNCTION ( $fn)? ( LEFT )? ( RIGHT )? functionArg )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(FUNCTION, "FUNCTION"), root_1);

            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:867:19: ( $fn)?
            	    if ( stream_fn.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_fn.NextTree());

            	    }
            	    stream_fn.Reset();
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:867:24: ( LEFT )?
            	    if ( stream_LEFT.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_LEFT.NextNode());

            	    }
            	    stream_LEFT.Reset();
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:867:30: ( RIGHT )?
            	    if ( stream_RIGHT.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_RIGHT.NextNode());

            	    }
            	    stream_RIGHT.Reset();
            	    adaptor.AddChild(root_1, stream_functionArg.NextTree());

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 44, function_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "function"

    public class caseExpWhen_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "caseExpWhen"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:870:1: caseExpWhen : WHEN w= expression THEN t= expression -> ^( WHEN $w $t) ;
    public SqlParser.caseExpWhen_return caseExpWhen() // throws RecognitionException [1]
    {   
        SqlParser.caseExpWhen_return retval = new SqlParser.caseExpWhen_return();
        retval.Start = input.LT(1);
        int caseExpWhen_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken WHEN283 = null;
        IToken THEN284 = null;
        SqlParser.expression_return w = default(SqlParser.expression_return);

        SqlParser.expression_return t = default(SqlParser.expression_return);


        CommonTree WHEN283_tree=null;
        CommonTree THEN284_tree=null;
        RewriteRuleTokenStream stream_THEN = new RewriteRuleTokenStream(adaptor,"token THEN");
        RewriteRuleTokenStream stream_WHEN = new RewriteRuleTokenStream(adaptor,"token WHEN");
        RewriteRuleSubtreeStream stream_expression = new RewriteRuleSubtreeStream(adaptor,"rule expression");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 45) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:871:5: ( WHEN w= expression THEN t= expression -> ^( WHEN $w $t) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:871:7: WHEN w= expression THEN t= expression
            {
            	WHEN283=(IToken)Match(input,WHEN,FOLLOW_WHEN_in_caseExpWhen7459); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_WHEN.Add(WHEN283);

            	PushFollow(FOLLOW_expression_in_caseExpWhen7463);
            	w = expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_expression.Add(w.Tree);
            	THEN284=(IToken)Match(input,THEN,FOLLOW_THEN_in_caseExpWhen7465); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_THEN.Add(THEN284);

            	PushFollow(FOLLOW_expression_in_caseExpWhen7469);
            	t = expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_expression.Add(t.Tree);


            	// AST REWRITE
            	// elements:          w, WHEN, t
            	// token labels:      
            	// rule labels:       w, retval, t
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_w = new RewriteRuleSubtreeStream(adaptor, "rule w", w!=null ? w.Tree : null);
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);
            	RewriteRuleSubtreeStream stream_t = new RewriteRuleSubtreeStream(adaptor, "rule t", t!=null ? t.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 872:5: -> ^( WHEN $w $t)
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:872:8: ^( WHEN $w $t)
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_WHEN.NextNode(), root_1);

            	    adaptor.AddChild(root_1, stream_w.NextTree());
            	    adaptor.AddChild(root_1, stream_t.NextTree());

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 45, caseExpWhen_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "caseExpWhen"

    public class caseSrchWhen_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "caseSrchWhen"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:874:1: caseSrchWhen : WHEN searchCondition THEN expression -> ^( WHEN searchCondition expression ) ;
    public SqlParser.caseSrchWhen_return caseSrchWhen() // throws RecognitionException [1]
    {   
        SqlParser.caseSrchWhen_return retval = new SqlParser.caseSrchWhen_return();
        retval.Start = input.LT(1);
        int caseSrchWhen_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken WHEN285 = null;
        IToken THEN287 = null;
        SqlParser.searchCondition_return searchCondition286 = default(SqlParser.searchCondition_return);

        SqlParser.expression_return expression288 = default(SqlParser.expression_return);


        CommonTree WHEN285_tree=null;
        CommonTree THEN287_tree=null;
        RewriteRuleTokenStream stream_THEN = new RewriteRuleTokenStream(adaptor,"token THEN");
        RewriteRuleTokenStream stream_WHEN = new RewriteRuleTokenStream(adaptor,"token WHEN");
        RewriteRuleSubtreeStream stream_expression = new RewriteRuleSubtreeStream(adaptor,"rule expression");
        RewriteRuleSubtreeStream stream_searchCondition = new RewriteRuleSubtreeStream(adaptor,"rule searchCondition");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 46) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:875:5: ( WHEN searchCondition THEN expression -> ^( WHEN searchCondition expression ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:875:7: WHEN searchCondition THEN expression
            {
            	WHEN285=(IToken)Match(input,WHEN,FOLLOW_WHEN_in_caseSrchWhen7501); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_WHEN.Add(WHEN285);

            	PushFollow(FOLLOW_searchCondition_in_caseSrchWhen7503);
            	searchCondition286 = searchCondition();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_searchCondition.Add(searchCondition286.Tree);
            	THEN287=(IToken)Match(input,THEN,FOLLOW_THEN_in_caseSrchWhen7505); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_THEN.Add(THEN287);

            	PushFollow(FOLLOW_expression_in_caseSrchWhen7507);
            	expression288 = expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_expression.Add(expression288.Tree);


            	// AST REWRITE
            	// elements:          expression, searchCondition, WHEN
            	// token labels:      
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 876:5: -> ^( WHEN searchCondition expression )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:876:8: ^( WHEN searchCondition expression )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_WHEN.NextNode(), root_1);

            	    adaptor.AddChild(root_1, stream_searchCondition.NextTree());
            	    adaptor.AddChild(root_1, stream_expression.NextTree());

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 46, caseSrchWhen_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "caseSrchWhen"

    public class caseFunction_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "caseFunction"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:879:1: caseFunction : CASE (t= expression (cx+= caseExpWhen )+ | (cx+= caseSrchWhen )+ ) ( ELSE els= expression )? END -> ^( CASE ( $t)? $cx ( ^( ELSE $els) )? ) ;
    public SqlParser.caseFunction_return caseFunction() // throws RecognitionException [1]
    {   
        SqlParser.caseFunction_return retval = new SqlParser.caseFunction_return();
        retval.Start = input.LT(1);
        int caseFunction_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken CASE289 = null;
        IToken ELSE290 = null;
        IToken END291 = null;
        IList list_cx = null;
        SqlParser.expression_return t = default(SqlParser.expression_return);

        SqlParser.expression_return els = default(SqlParser.expression_return);

        RuleReturnScope cx = null;
        /*SqlParser.caseSrchWhen_return cx = default(SqlParser.caseSrchWhen_return);
         cx = null;
         * */
        CommonTree CASE289_tree=null;
        CommonTree ELSE290_tree=null;
        CommonTree END291_tree=null;
        RewriteRuleTokenStream stream_END = new RewriteRuleTokenStream(adaptor,"token END");
        RewriteRuleTokenStream stream_ELSE = new RewriteRuleTokenStream(adaptor,"token ELSE");
        RewriteRuleTokenStream stream_CASE = new RewriteRuleTokenStream(adaptor,"token CASE");
        RewriteRuleSubtreeStream stream_expression = new RewriteRuleSubtreeStream(adaptor,"rule expression");
        RewriteRuleSubtreeStream stream_caseExpWhen = new RewriteRuleSubtreeStream(adaptor,"rule caseExpWhen");
        RewriteRuleSubtreeStream stream_caseSrchWhen = new RewriteRuleSubtreeStream(adaptor,"rule caseSrchWhen");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 47) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:880:5: ( CASE (t= expression (cx+= caseExpWhen )+ | (cx+= caseSrchWhen )+ ) ( ELSE els= expression )? END -> ^( CASE ( $t)? $cx ( ^( ELSE $els) )? ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:880:7: CASE (t= expression (cx+= caseExpWhen )+ | (cx+= caseSrchWhen )+ ) ( ELSE els= expression )? END
            {
            	CASE289=(IToken)Match(input,CASE,FOLLOW_CASE_in_caseFunction7538); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_CASE.Add(CASE289);

            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:880:12: (t= expression (cx+= caseExpWhen )+ | (cx+= caseSrchWhen )+ )
            	int alt104 = 2;
            	alt104 = dfa104.Predict(input);
            	switch (alt104) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:881:6: t= expression (cx+= caseExpWhen )+
            	        {
            	        	PushFollow(FOLLOW_expression_in_caseFunction7549);
            	        	t = expression();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_expression.Add(t.Tree);
            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:881:21: (cx+= caseExpWhen )+
            	        	int cnt102 = 0;
            	        	do 
            	        	{
            	        	    int alt102 = 2;
            	        	    int LA102_0 = input.LA(1);

            	        	    if ( (LA102_0 == WHEN) )
            	        	    {
            	        	        alt102 = 1;
            	        	    }


            	        	    switch (alt102) 
            	        		{
            	        			case 1 :
            	        			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:0:0: cx+= caseExpWhen
            	        			    {
            	        			    	PushFollow(FOLLOW_caseExpWhen_in_caseFunction7553);
            	        			    	cx = caseExpWhen();
            	        			    	state.followingStackPointer--;
            	        			    	if (state.failed) return retval;
            	        			    	if ( (state.backtracking==0) ) stream_caseExpWhen.Add(cx.Tree);
            	        			    	if (list_cx == null) list_cx = new ArrayList();
            	        			    	list_cx.Add(cx.Tree);


            	        			    }
            	        			    break;

            	        			default:
            	        			    if ( cnt102 >= 1 ) goto loop102;
            	        			    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	        		            EarlyExitException eee102 =
            	        		                new EarlyExitException(102, input);
            	        		            throw eee102;
            	        	    }
            	        	    cnt102++;
            	        	} while (true);

            	        	loop102:
            	        		;	// Stops C# compiler whining that label 'loop102' has no statements


            	        }
            	        break;
            	    case 2 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:882:8: (cx+= caseSrchWhen )+
            	        {
            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:882:10: (cx+= caseSrchWhen )+
            	        	int cnt103 = 0;
            	        	do 
            	        	{
            	        	    int alt103 = 2;
            	        	    int LA103_0 = input.LA(1);

            	        	    if ( (LA103_0 == WHEN) )
            	        	    {
            	        	        alt103 = 1;
            	        	    }


            	        	    switch (alt103) 
            	        		{
            	        			case 1 :
            	        			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:0:0: cx+= caseSrchWhen
            	        			    {
            	        			    	PushFollow(FOLLOW_caseSrchWhen_in_caseFunction7565);
            	        			    	cx = caseSrchWhen();
            	        			    	state.followingStackPointer--;
            	        			    	if (state.failed) return retval;
            	        			    	if ( (state.backtracking==0) ) stream_caseSrchWhen.Add(cx.Tree);
            	        			    	if (list_cx == null) list_cx = new ArrayList();
            	        			    	list_cx.Add(cx.Tree);


            	        			    }
            	        			    break;

            	        			default:
            	        			    if ( cnt103 >= 1 ) goto loop103;
            	        			    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	        		            EarlyExitException eee103 =
            	        		                new EarlyExitException(103, input);
            	        		            throw eee103;
            	        	    }
            	        	    cnt103++;
            	        	} while (true);

            	        	loop103:
            	        		;	// Stops C# compiler whining that label 'loop103' has no statements


            	        }
            	        break;

            	}

            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:886:5: ( ELSE els= expression )?
            	int alt105 = 2;
            	int LA105_0 = input.LA(1);

            	if ( (LA105_0 == ELSE) )
            	{
            	    alt105 = 1;
            	}
            	switch (alt105) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:886:6: ELSE els= expression
            	        {
            	        	ELSE290=(IToken)Match(input,ELSE,FOLLOW_ELSE_in_caseFunction7585); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_ELSE.Add(ELSE290);

            	        	PushFollow(FOLLOW_expression_in_caseFunction7589);
            	        	els = expression();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_expression.Add(els.Tree);

            	        }
            	        break;

            	}

            	END291=(IToken)Match(input,END,FOLLOW_END_in_caseFunction7593); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_END.Add(END291);



            	// AST REWRITE
            	// elements:          els, cx, t, CASE, ELSE
            	// token labels:      
            	// rule labels:       retval, t, els
            	// token list labels: 
            	// rule list labels:  cx
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);
            	RewriteRuleSubtreeStream stream_t = new RewriteRuleSubtreeStream(adaptor, "rule t", t!=null ? t.Tree : null);
            	RewriteRuleSubtreeStream stream_els = new RewriteRuleSubtreeStream(adaptor, "rule els", els!=null ? els.Tree : null);
            	RewriteRuleSubtreeStream stream_cx = new RewriteRuleSubtreeStream(adaptor, "token cx", list_cx);
            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 887:5: -> ^( CASE ( $t)? $cx ( ^( ELSE $els) )? )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:887:8: ^( CASE ( $t)? $cx ( ^( ELSE $els) )? )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_CASE.NextNode(), root_1);

            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:887:15: ( $t)?
            	    if ( stream_t.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_t.NextTree());

            	    }
            	    stream_t.Reset();
            	    adaptor.AddChild(root_1, stream_cx.NextTree());
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:887:23: ( ^( ELSE $els) )?
            	    if ( stream_els.HasNext() || stream_ELSE.HasNext() )
            	    {
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:887:23: ^( ELSE $els)
            	        {
            	        CommonTree root_2 = (CommonTree)adaptor.GetNilNode();
            	        root_2 = (CommonTree)adaptor.BecomeRoot(stream_ELSE.NextNode(), root_2);

            	        adaptor.AddChild(root_2, stream_els.NextTree());

            	        adaptor.AddChild(root_1, root_2);
            	        }

            	    }
            	    stream_els.Reset();
            	    stream_ELSE.Reset();

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 47, caseFunction_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "caseFunction"

    public class castFunction_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "castFunction"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:890:1: castFunction : CAST LPAREN expression AS identifier ( LPAREN l= Integer ( COMMA r= Integer )? RPAREN )? RPAREN -> ^( CAST expression identifier ( $l)? ( $r)? ) ;
    public SqlParser.castFunction_return castFunction() // throws RecognitionException [1]
    {   
        SqlParser.castFunction_return retval = new SqlParser.castFunction_return();
        retval.Start = input.LT(1);
        int castFunction_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken l = null;
        IToken r = null;
        IToken CAST292 = null;
        IToken LPAREN293 = null;
        IToken AS295 = null;
        IToken LPAREN297 = null;
        IToken COMMA298 = null;
        IToken RPAREN299 = null;
        IToken RPAREN300 = null;
        SqlParser.expression_return expression294 = default(SqlParser.expression_return);

        SqlParser.identifier_return identifier296 = default(SqlParser.identifier_return);


        CommonTree l_tree=null;
        CommonTree r_tree=null;
        CommonTree CAST292_tree=null;
        CommonTree LPAREN293_tree=null;
        CommonTree AS295_tree=null;
        CommonTree LPAREN297_tree=null;
        CommonTree COMMA298_tree=null;
        CommonTree RPAREN299_tree=null;
        CommonTree RPAREN300_tree=null;
        RewriteRuleTokenStream stream_CAST = new RewriteRuleTokenStream(adaptor,"token CAST");
        RewriteRuleTokenStream stream_AS = new RewriteRuleTokenStream(adaptor,"token AS");
        RewriteRuleTokenStream stream_RPAREN = new RewriteRuleTokenStream(adaptor,"token RPAREN");
        RewriteRuleTokenStream stream_COMMA = new RewriteRuleTokenStream(adaptor,"token COMMA");
        RewriteRuleTokenStream stream_Integer = new RewriteRuleTokenStream(adaptor,"token Integer");
        RewriteRuleTokenStream stream_LPAREN = new RewriteRuleTokenStream(adaptor,"token LPAREN");
        RewriteRuleSubtreeStream stream_expression = new RewriteRuleSubtreeStream(adaptor,"rule expression");
        RewriteRuleSubtreeStream stream_identifier = new RewriteRuleSubtreeStream(adaptor,"rule identifier");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 48) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:891:5: ( CAST LPAREN expression AS identifier ( LPAREN l= Integer ( COMMA r= Integer )? RPAREN )? RPAREN -> ^( CAST expression identifier ( $l)? ( $r)? ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:891:7: CAST LPAREN expression AS identifier ( LPAREN l= Integer ( COMMA r= Integer )? RPAREN )? RPAREN
            {
            	CAST292=(IToken)Match(input,CAST,FOLLOW_CAST_in_castFunction7635); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_CAST.Add(CAST292);

            	LPAREN293=(IToken)Match(input,LPAREN,FOLLOW_LPAREN_in_castFunction7637); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_LPAREN.Add(LPAREN293);

            	PushFollow(FOLLOW_expression_in_castFunction7639);
            	expression294 = expression();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_expression.Add(expression294.Tree);
            	AS295=(IToken)Match(input,AS,FOLLOW_AS_in_castFunction7641); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_AS.Add(AS295);

            	PushFollow(FOLLOW_identifier_in_castFunction7643);
            	identifier296 = identifier();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_identifier.Add(identifier296.Tree);
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:891:44: ( LPAREN l= Integer ( COMMA r= Integer )? RPAREN )?
            	int alt107 = 2;
            	int LA107_0 = input.LA(1);

            	if ( (LA107_0 == LPAREN) )
            	{
            	    alt107 = 1;
            	}
            	switch (alt107) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:891:45: LPAREN l= Integer ( COMMA r= Integer )? RPAREN
            	        {
            	        	LPAREN297=(IToken)Match(input,LPAREN,FOLLOW_LPAREN_in_castFunction7646); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_LPAREN.Add(LPAREN297);

            	        	l=(IToken)Match(input,Integer,FOLLOW_Integer_in_castFunction7650); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_Integer.Add(l);

            	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:891:62: ( COMMA r= Integer )?
            	        	int alt106 = 2;
            	        	int LA106_0 = input.LA(1);

            	        	if ( (LA106_0 == COMMA) )
            	        	{
            	        	    alt106 = 1;
            	        	}
            	        	switch (alt106) 
            	        	{
            	        	    case 1 :
            	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:891:63: COMMA r= Integer
            	        	        {
            	        	        	COMMA298=(IToken)Match(input,COMMA,FOLLOW_COMMA_in_castFunction7653); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_COMMA.Add(COMMA298);

            	        	        	r=(IToken)Match(input,Integer,FOLLOW_Integer_in_castFunction7657); if (state.failed) return retval; 
            	        	        	if ( (state.backtracking==0) ) stream_Integer.Add(r);


            	        	        }
            	        	        break;

            	        	}

            	        	RPAREN299=(IToken)Match(input,RPAREN,FOLLOW_RPAREN_in_castFunction7661); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_RPAREN.Add(RPAREN299);


            	        }
            	        break;

            	}

            	RPAREN300=(IToken)Match(input,RPAREN,FOLLOW_RPAREN_in_castFunction7665); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_RPAREN.Add(RPAREN300);



            	// AST REWRITE
            	// elements:          expression, l, CAST, identifier, r
            	// token labels:      r, l
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleTokenStream stream_r = new RewriteRuleTokenStream(adaptor, "token r", r);
            	RewriteRuleTokenStream stream_l = new RewriteRuleTokenStream(adaptor, "token l", l);
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 892:5: -> ^( CAST expression identifier ( $l)? ( $r)? )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:892:8: ^( CAST expression identifier ( $l)? ( $r)? )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_CAST.NextNode(), root_1);

            	    adaptor.AddChild(root_1, stream_expression.NextTree());
            	    adaptor.AddChild(root_1, stream_identifier.NextTree());
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:892:37: ( $l)?
            	    if ( stream_l.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_l.NextNode());

            	    }
            	    stream_l.Reset();
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:892:41: ( $r)?
            	    if ( stream_r.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_r.NextNode());

            	    }
            	    stream_r.Reset();

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 48, castFunction_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "castFunction"

    public class dbObjectName_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "dbObjectName"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:895:1: dbObjectName : ( identifier | IDENTITYCOL | ROWGUIDCOL | keywordAsIdentifier );
    public SqlParser.dbObjectName_return dbObjectName() // throws RecognitionException [1]
    {   
        SqlParser.dbObjectName_return retval = new SqlParser.dbObjectName_return();
        retval.Start = input.LT(1);
        int dbObjectName_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken IDENTITYCOL302 = null;
        IToken ROWGUIDCOL303 = null;
        SqlParser.identifier_return identifier301 = default(SqlParser.identifier_return);

        SqlParser.keywordAsIdentifier_return keywordAsIdentifier304 = default(SqlParser.keywordAsIdentifier_return);


        CommonTree IDENTITYCOL302_tree=null;
        CommonTree ROWGUIDCOL303_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 49) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:896:5: ( identifier | IDENTITYCOL | ROWGUIDCOL | keywordAsIdentifier )
            int alt108 = 4;
            switch ( input.LA(1) ) 
            {
            case NonQuotedIdentifier:
            case QuotedIdentifier:
            	{
                alt108 = 1;
                }
                break;
            case IDENTITYCOL:
            	{
                alt108 = 2;
                }
                break;
            case ROWGUIDCOL:
            	{
                alt108 = 3;
                }
                break;
            case AUTO:
            case BASE64:
            case BINARY:
            case CAST:
            case CONCAT:
            case CUBE:
            case ELEMENTS:
            case EXPAND:
            case EXPLICIT:
            case FAST:
            case FASTFIRSTROW:
            case FORCE:
            case HASH:
            case KEEP:
            case KEEPFIXED:
            case LOOP:
            case MAXDOP:
            case MERGE:
            case NOLOCK:
            case PAGLOCK:
            case RAW:
            case READCOMMITED:
            case READPAST:
            case READUNCOMMITED:
            case REMOTE:
            case REPEATABLEREAD:
            case ROBUST:
            case ROLLUP:
            case ROWLOCK:
            case SERIALIZABLE:
            case TABLOCK:
            case TABLOCKX:
            case TIES:
            case UPDLOCK:
            case VIEWS:
            case XLOCK:
            case XML:
            case XMLDATA:
            	{
                alt108 = 4;
                }
                break;
            	default:
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d108s0 =
            	        new NoViableAltException("", 108, 0, input);

            	    throw nvae_d108s0;
            }

            switch (alt108) 
            {
                case 1 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:896:7: identifier
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_identifier_in_dbObjectName7704);
                    	identifier301 = identifier();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, identifier301.Tree);

                    }
                    break;
                case 2 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:896:20: IDENTITYCOL
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	IDENTITYCOL302=(IToken)Match(input,IDENTITYCOL,FOLLOW_IDENTITYCOL_in_dbObjectName7708); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{IDENTITYCOL302_tree = (CommonTree)adaptor.Create(IDENTITYCOL302);
                    		adaptor.AddChild(root_0, IDENTITYCOL302_tree);
                    	}

                    }
                    break;
                case 3 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:896:34: ROWGUIDCOL
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	ROWGUIDCOL303=(IToken)Match(input,ROWGUIDCOL,FOLLOW_ROWGUIDCOL_in_dbObjectName7712); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{ROWGUIDCOL303_tree = (CommonTree)adaptor.Create(ROWGUIDCOL303);
                    		adaptor.AddChild(root_0, ROWGUIDCOL303_tree);
                    	}

                    }
                    break;
                case 4 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:896:47: keywordAsIdentifier
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_keywordAsIdentifier_in_dbObjectName7716);
                    	keywordAsIdentifier304 = keywordAsIdentifier();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, keywordAsIdentifier304.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 49, dbObjectName_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "dbObjectName"

    public class dbObject_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "dbObject"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:899:1: dbObject : dbObjectName ( DOT dbObjectName | ( DOT DOT )=> DOT DOT dbObjectName )* -> ^( OBJECT ( dbObjectName )+ ) ;
    public SqlParser.dbObject_return dbObject() // throws RecognitionException [1]
    {   
        SqlParser.dbObject_return retval = new SqlParser.dbObject_return();
        retval.Start = input.LT(1);
        int dbObject_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken DOT306 = null;
        IToken DOT308 = null;
        IToken DOT309 = null;
        SqlParser.dbObjectName_return dbObjectName305 = default(SqlParser.dbObjectName_return);

        SqlParser.dbObjectName_return dbObjectName307 = default(SqlParser.dbObjectName_return);

        SqlParser.dbObjectName_return dbObjectName310 = default(SqlParser.dbObjectName_return);


        CommonTree DOT306_tree=null;
        CommonTree DOT308_tree=null;
        CommonTree DOT309_tree=null;
        RewriteRuleTokenStream stream_DOT = new RewriteRuleTokenStream(adaptor,"token DOT");
        RewriteRuleSubtreeStream stream_dbObjectName = new RewriteRuleSubtreeStream(adaptor,"rule dbObjectName");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 50) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:902:5: ( dbObjectName ( DOT dbObjectName | ( DOT DOT )=> DOT DOT dbObjectName )* -> ^( OBJECT ( dbObjectName )+ ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:903:5: dbObjectName ( DOT dbObjectName | ( DOT DOT )=> DOT DOT dbObjectName )*
            {
            	PushFollow(FOLLOW_dbObjectName_in_dbObject7747);
            	dbObjectName305 = dbObjectName();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_dbObjectName.Add(dbObjectName305.Tree);
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:903:18: ( DOT dbObjectName | ( DOT DOT )=> DOT DOT dbObjectName )*
            	do 
            	{
            	    int alt109 = 3;
            	    alt109 = dfa109.Predict(input);
            	    switch (alt109) 
            		{
            			case 1 :
            			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:904:11: DOT dbObjectName
            			    {
            			    	DOT306=(IToken)Match(input,DOT,FOLLOW_DOT_in_dbObject7761); if (state.failed) return retval; 
            			    	if ( (state.backtracking==0) ) stream_DOT.Add(DOT306);

            			    	PushFollow(FOLLOW_dbObjectName_in_dbObject7763);
            			    	dbObjectName307 = dbObjectName();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( (state.backtracking==0) ) stream_dbObjectName.Add(dbObjectName307.Tree);

            			    }
            			    break;
            			case 2 :
            			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:905:11: ( DOT DOT )=> DOT DOT dbObjectName
            			    {
            			    	DOT308=(IToken)Match(input,DOT,FOLLOW_DOT_in_dbObject7783); if (state.failed) return retval; 
            			    	if ( (state.backtracking==0) ) stream_DOT.Add(DOT308);

            			    	DOT309=(IToken)Match(input,DOT,FOLLOW_DOT_in_dbObject7785); if (state.failed) return retval; 
            			    	if ( (state.backtracking==0) ) stream_DOT.Add(DOT309);

            			    	PushFollow(FOLLOW_dbObjectName_in_dbObject7787);
            			    	dbObjectName310 = dbObjectName();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( (state.backtracking==0) ) stream_dbObjectName.Add(dbObjectName310.Tree);

            			    }
            			    break;

            			default:
            			    goto loop109;
            	    }
            	} while (true);

            	loop109:
            		;	// Stops C# compiler whining that label 'loop109' has no statements



            	// AST REWRITE
            	// elements:          dbObjectName
            	// token labels:      
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 907:5: -> ^( OBJECT ( dbObjectName )+ )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:907:8: ^( OBJECT ( dbObjectName )+ )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(OBJECT, "OBJECT"), root_1);

            	    if ( !(stream_dbObjectName.HasNext()) ) {
            	        throw new RewriteEarlyExitException();
            	    }
            	    while ( stream_dbObjectName.HasNext() )
            	    {
            	        adaptor.AddChild(root_1, stream_dbObjectName.NextTree());

            	    }
            	    stream_dbObjectName.Reset();

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 50, dbObject_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "dbObject"

    public class parameterlessFunction_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "parameterlessFunction"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:910:1: parameterlessFunction : ( CURRENT_TIMESTAMP | CURRENT_USER | SESSION_USER | SYSTEM_USER );
    public SqlParser.parameterlessFunction_return parameterlessFunction() // throws RecognitionException [1]
    {   
        SqlParser.parameterlessFunction_return retval = new SqlParser.parameterlessFunction_return();
        retval.Start = input.LT(1);
        int parameterlessFunction_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken set311 = null;

        CommonTree set311_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 51) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:911:5: ( CURRENT_TIMESTAMP | CURRENT_USER | SESSION_USER | SYSTEM_USER )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	set311 = (IToken)input.LT(1);
            	if ( (input.LA(1) >= CURRENT_TIMESTAMP && input.LA(1) <= CURRENT_USER) || input.LA(1) == SESSION_USER || input.LA(1) == SYSTEM_USER ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (CommonTree)adaptor.Create(set311));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 51, parameterlessFunction_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "parameterlessFunction"

    public class systemVariable_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "systemVariable"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:918:1: systemVariable : ( F_CONNECTIONS | F_CPU_BUSY | F_CURSOR_ROWS | F_DATEFIRST | F_DBTS | F_ERROR | F_FETCH_STATUS | F_IDENTITY | F_IDLE | F_IO_BUSY | F_LANGID | F_LANGUAGE | F_LOCK_TIMEOUT | F_MAX_CONNECTIONS | F_MAX_PRECISION | F_NESTLEVEL | F_OPTIONS | F_PACK_RECEIVED | F_PACK_SENT | F_PACKET_ERRORS | F_PROCID | F_REMSERVER | F_ROWCOUNT | F_SERVERNAME | F_SERVICENAME | F_SPID | F_TEXTSIZE | F_TIMETICKS | F_TOTAL_ERRORS | F_TOTAL_READ | F_TOTAL_WRITE | F_TRANCOUNT | F_VERSION );
    public SqlParser.systemVariable_return systemVariable() // throws RecognitionException [1]
    {   
        SqlParser.systemVariable_return retval = new SqlParser.systemVariable_return();
        retval.Start = input.LT(1);
        int systemVariable_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken set312 = null;

        CommonTree set312_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 52) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:919:5: ( F_CONNECTIONS | F_CPU_BUSY | F_CURSOR_ROWS | F_DATEFIRST | F_DBTS | F_ERROR | F_FETCH_STATUS | F_IDENTITY | F_IDLE | F_IO_BUSY | F_LANGID | F_LANGUAGE | F_LOCK_TIMEOUT | F_MAX_CONNECTIONS | F_MAX_PRECISION | F_NESTLEVEL | F_OPTIONS | F_PACK_RECEIVED | F_PACK_SENT | F_PACKET_ERRORS | F_PROCID | F_REMSERVER | F_ROWCOUNT | F_SERVERNAME | F_SERVICENAME | F_SPID | F_TEXTSIZE | F_TIMETICKS | F_TOTAL_ERRORS | F_TOTAL_READ | F_TOTAL_WRITE | F_TRANCOUNT | F_VERSION )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	set312 = (IToken)input.LT(1);
            	if ( (input.LA(1) >= F_CONNECTIONS && input.LA(1) <= F_VERSION) ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (CommonTree)adaptor.Create(set312));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 52, systemVariable_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "systemVariable"

    public class keywordAsIdentifier_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "keywordAsIdentifier"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:955:1: keywordAsIdentifier : ( AUTO | BASE64 | BINARY | CAST | CONCAT | CUBE | ELEMENTS | EXPAND | EXPLICIT | FAST | FASTFIRSTROW | FORCE | HASH | KEEP | KEEPFIXED | LOOP | MAXDOP | MERGE | NOLOCK | PAGLOCK | RAW | READCOMMITED | READPAST | READUNCOMMITED | REMOTE | REPEATABLEREAD | ROBUST | ROLLUP | ROWLOCK | SERIALIZABLE | TABLOCK | TABLOCKX | TIES | UPDLOCK | VIEWS | XLOCK | XML | XMLDATA ) ;
    public SqlParser.keywordAsIdentifier_return keywordAsIdentifier() // throws RecognitionException [1]
    {   
        SqlParser.keywordAsIdentifier_return retval = new SqlParser.keywordAsIdentifier_return();
        retval.Start = input.LT(1);
        int keywordAsIdentifier_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken set313 = null;

        CommonTree set313_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 53) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:956:5: ( ( AUTO | BASE64 | BINARY | CAST | CONCAT | CUBE | ELEMENTS | EXPAND | EXPLICIT | FAST | FASTFIRSTROW | FORCE | HASH | KEEP | KEEPFIXED | LOOP | MAXDOP | MERGE | NOLOCK | PAGLOCK | RAW | READCOMMITED | READPAST | READUNCOMMITED | REMOTE | REPEATABLEREAD | ROBUST | ROLLUP | ROWLOCK | SERIALIZABLE | TABLOCK | TABLOCKX | TIES | UPDLOCK | VIEWS | XLOCK | XML | XMLDATA ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:957:5: ( AUTO | BASE64 | BINARY | CAST | CONCAT | CUBE | ELEMENTS | EXPAND | EXPLICIT | FAST | FASTFIRSTROW | FORCE | HASH | KEEP | KEEPFIXED | LOOP | MAXDOP | MERGE | NOLOCK | PAGLOCK | RAW | READCOMMITED | READPAST | READUNCOMMITED | REMOTE | REPEATABLEREAD | ROBUST | ROLLUP | ROWLOCK | SERIALIZABLE | TABLOCK | TABLOCKX | TIES | UPDLOCK | VIEWS | XLOCK | XML | XMLDATA )
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	set313 = (IToken)input.LT(1);
            	if ( input.LA(1) == AUTO || input.LA(1) == BASE64 || input.LA(1) == BINARY || input.LA(1) == CAST || input.LA(1) == CONCAT || input.LA(1) == CUBE || input.LA(1) == ELEMENTS || (input.LA(1) >= EXPAND && input.LA(1) <= FASTFIRSTROW) || input.LA(1) == FORCE || input.LA(1) == HASH || (input.LA(1) >= KEEP && input.LA(1) <= KEEPFIXED) || (input.LA(1) >= LOOP && input.LA(1) <= MERGE) || input.LA(1) == NOLOCK || input.LA(1) == PAGLOCK || input.LA(1) == RAW || (input.LA(1) >= READCOMMITED && input.LA(1) <= READPAST) || input.LA(1) == READUNCOMMITED || (input.LA(1) >= REMOTE && input.LA(1) <= REPEATABLEREAD) || input.LA(1) == ROBUST || input.LA(1) == ROLLUP || input.LA(1) == ROWLOCK || input.LA(1) == SERIALIZABLE || (input.LA(1) >= TABLOCK && input.LA(1) <= TABLOCKX) || input.LA(1) == TIES || input.LA(1) == UPDLOCK || input.LA(1) == VIEWS || (input.LA(1) >= XLOCK && input.LA(1) <= XMLDATA) ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (CommonTree)adaptor.Create(set313));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 53, keywordAsIdentifier_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "keywordAsIdentifier"

    public class stringLiteral_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "stringLiteral"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:999:1: stringLiteral : ( UnicodeStringLiteral | ASCIIStringLiteral );
    public SqlParser.stringLiteral_return stringLiteral() // throws RecognitionException [1]
    {   
        SqlParser.stringLiteral_return retval = new SqlParser.stringLiteral_return();
        retval.Start = input.LT(1);
        int stringLiteral_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken set314 = null;

        CommonTree set314_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 54) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1000:5: ( UnicodeStringLiteral | ASCIIStringLiteral )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	set314 = (IToken)input.LT(1);
            	if ( (input.LA(1) >= UnicodeStringLiteral && input.LA(1) <= ASCIIStringLiteral) ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (CommonTree)adaptor.Create(set314));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 54, stringLiteral_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "stringLiteral"

    public class identifier_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "identifier"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1005:1: identifier : ( NonQuotedIdentifier | QuotedIdentifier );
    public SqlParser.identifier_return identifier() // throws RecognitionException [1]
    {   
        SqlParser.identifier_return retval = new SqlParser.identifier_return();
        retval.Start = input.LT(1);
        int identifier_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken set315 = null;

        CommonTree set315_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 55) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1006:5: ( NonQuotedIdentifier | QuotedIdentifier )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	set315 = (IToken)input.LT(1);
            	if ( (input.LA(1) >= NonQuotedIdentifier && input.LA(1) <= QuotedIdentifier) ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (CommonTree)adaptor.Create(set315));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 55, identifier_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "identifier"

    public class constantExpr_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "constantExpr"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1011:1: constantExpr : constant -> ^( CONSTANT constant ) ;
    public SqlParser.constantExpr_return constantExpr() // throws RecognitionException [1]
    {   
        SqlParser.constantExpr_return retval = new SqlParser.constantExpr_return();
        retval.Start = input.LT(1);
        int constantExpr_StartIndex = input.Index();
        CommonTree root_0 = null;

        SqlParser.constant_return constant316 = default(SqlParser.constant_return);


        RewriteRuleSubtreeStream stream_constant = new RewriteRuleSubtreeStream(adaptor,"rule constant");
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 56) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1012:5: ( constant -> ^( CONSTANT constant ) )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1012:7: constant
            {
            	PushFollow(FOLLOW_constant_in_constantExpr8548);
            	constant316 = constant();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_constant.Add(constant316.Tree);


            	// AST REWRITE
            	// elements:          constant
            	// token labels:      
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (CommonTree)adaptor.GetNilNode();
            	// 1012:16: -> ^( CONSTANT constant )
            	{
            	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1012:19: ^( CONSTANT constant )
            	    {
            	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
            	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(CONSTANT, "CONSTANT"), root_1);

            	    adaptor.AddChild(root_1, stream_constant.NextTree());

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 56, constantExpr_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "constantExpr"

    public class constant_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "constant"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1015:1: constant : ( Integer | Real | NULL | stringLiteral | HexLiteral | Currency | ODBCDateTime | systemVariable );
    public SqlParser.constant_return constant() // throws RecognitionException [1]
    {   
        SqlParser.constant_return retval = new SqlParser.constant_return();
        retval.Start = input.LT(1);
        int constant_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken Integer317 = null;
        IToken Real318 = null;
        IToken NULL319 = null;
        IToken HexLiteral321 = null;
        IToken Currency322 = null;
        IToken ODBCDateTime323 = null;
        SqlParser.stringLiteral_return stringLiteral320 = default(SqlParser.stringLiteral_return);

        SqlParser.systemVariable_return systemVariable324 = default(SqlParser.systemVariable_return);


        CommonTree Integer317_tree=null;
        CommonTree Real318_tree=null;
        CommonTree NULL319_tree=null;
        CommonTree HexLiteral321_tree=null;
        CommonTree Currency322_tree=null;
        CommonTree ODBCDateTime323_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 57) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1016:5: ( Integer | Real | NULL | stringLiteral | HexLiteral | Currency | ODBCDateTime | systemVariable )
            int alt110 = 8;
            switch ( input.LA(1) ) 
            {
            case Integer:
            	{
                alt110 = 1;
                }
                break;
            case Real:
            	{
                alt110 = 2;
                }
                break;
            case NULL:
            	{
                alt110 = 3;
                }
                break;
            case UnicodeStringLiteral:
            case ASCIIStringLiteral:
            	{
                alt110 = 4;
                }
                break;
            case HexLiteral:
            	{
                alt110 = 5;
                }
                break;
            case Currency:
            	{
                alt110 = 6;
                }
                break;
            case ODBCDateTime:
            	{
                alt110 = 7;
                }
                break;
            case F_CONNECTIONS:
            case F_CPU_BUSY:
            case F_CURSOR_ROWS:
            case F_DATEFIRST:
            case F_DBTS:
            case F_ERROR:
            case F_FETCH_STATUS:
            case F_IDENTITY:
            case F_IDLE:
            case F_IO_BUSY:
            case F_LANGID:
            case F_LANGUAGE:
            case F_LOCK_TIMEOUT:
            case F_MAX_CONNECTIONS:
            case F_MAX_PRECISION:
            case F_NESTLEVEL:
            case F_OPTIONS:
            case F_PACK_RECEIVED:
            case F_PACK_SENT:
            case F_PACKET_ERRORS:
            case F_PROCID:
            case F_REMSERVER:
            case F_ROWCOUNT:
            case F_SERVERNAME:
            case F_SERVICENAME:
            case F_SPID:
            case F_TEXTSIZE:
            case F_TIMETICKS:
            case F_TOTAL_ERRORS:
            case F_TOTAL_READ:
            case F_TOTAL_WRITE:
            case F_TRANCOUNT:
            case F_VERSION:
            	{
                alt110 = 8;
                }
                break;
            	default:
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d110s0 =
            	        new NoViableAltException("", 110, 0, input);

            	    throw nvae_d110s0;
            }

            switch (alt110) 
            {
                case 1 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1016:7: Integer
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	Integer317=(IToken)Match(input,Integer,FOLLOW_Integer_in_constant8573); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{Integer317_tree = (CommonTree)adaptor.Create(Integer317);
                    		adaptor.AddChild(root_0, Integer317_tree);
                    	}

                    }
                    break;
                case 2 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1017:7: Real
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	Real318=(IToken)Match(input,Real,FOLLOW_Real_in_constant8581); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{Real318_tree = (CommonTree)adaptor.Create(Real318);
                    		adaptor.AddChild(root_0, Real318_tree);
                    	}

                    }
                    break;
                case 3 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1018:7: NULL
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	NULL319=(IToken)Match(input,NULL,FOLLOW_NULL_in_constant8589); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{NULL319_tree = (CommonTree)adaptor.Create(NULL319);
                    		adaptor.AddChild(root_0, NULL319_tree);
                    	}

                    }
                    break;
                case 4 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1019:7: stringLiteral
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_stringLiteral_in_constant8597);
                    	stringLiteral320 = stringLiteral();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, stringLiteral320.Tree);

                    }
                    break;
                case 5 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1020:7: HexLiteral
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	HexLiteral321=(IToken)Match(input,HexLiteral,FOLLOW_HexLiteral_in_constant8605); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{HexLiteral321_tree = (CommonTree)adaptor.Create(HexLiteral321);
                    		adaptor.AddChild(root_0, HexLiteral321_tree);
                    	}

                    }
                    break;
                case 6 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1021:7: Currency
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	Currency322=(IToken)Match(input,Currency,FOLLOW_Currency_in_constant8613); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{Currency322_tree = (CommonTree)adaptor.Create(Currency322);
                    		adaptor.AddChild(root_0, Currency322_tree);
                    	}

                    }
                    break;
                case 7 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1022:7: ODBCDateTime
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	ODBCDateTime323=(IToken)Match(input,ODBCDateTime,FOLLOW_ODBCDateTime_in_constant8621); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{ODBCDateTime323_tree = (CommonTree)adaptor.Create(ODBCDateTime323);
                    		adaptor.AddChild(root_0, ODBCDateTime323_tree);
                    	}

                    }
                    break;
                case 8 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1023:7: systemVariable
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_systemVariable_in_constant8629);
                    	systemVariable324 = systemVariable();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, systemVariable324.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 57, constant_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "constant"

    public class unaryOperator_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "unaryOperator"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1026:1: unaryOperator : ( PLUS -> ^( SIGN_PLUS ) | MINUS -> ^( SIGN_MINUS ) | TILDE -> ^( TILDE ) );
    public SqlParser.unaryOperator_return unaryOperator() // throws RecognitionException [1]
    {   
        SqlParser.unaryOperator_return retval = new SqlParser.unaryOperator_return();
        retval.Start = input.LT(1);
        int unaryOperator_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken PLUS325 = null;
        IToken MINUS326 = null;
        IToken TILDE327 = null;

        CommonTree PLUS325_tree=null;
        CommonTree MINUS326_tree=null;
        CommonTree TILDE327_tree=null;
        RewriteRuleTokenStream stream_PLUS = new RewriteRuleTokenStream(adaptor,"token PLUS");
        RewriteRuleTokenStream stream_MINUS = new RewriteRuleTokenStream(adaptor,"token MINUS");
        RewriteRuleTokenStream stream_TILDE = new RewriteRuleTokenStream(adaptor,"token TILDE");

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 58) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1027:5: ( PLUS -> ^( SIGN_PLUS ) | MINUS -> ^( SIGN_MINUS ) | TILDE -> ^( TILDE ) )
            int alt111 = 3;
            switch ( input.LA(1) ) 
            {
            case PLUS:
            	{
                alt111 = 1;
                }
                break;
            case MINUS:
            	{
                alt111 = 2;
                }
                break;
            case TILDE:
            	{
                alt111 = 3;
                }
                break;
            	default:
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d111s0 =
            	        new NoViableAltException("", 111, 0, input);

            	    throw nvae_d111s0;
            }

            switch (alt111) 
            {
                case 1 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1027:7: PLUS
                    {
                    	PLUS325=(IToken)Match(input,PLUS,FOLLOW_PLUS_in_unaryOperator8646); if (state.failed) return retval; 
                    	if ( (state.backtracking==0) ) stream_PLUS.Add(PLUS325);



                    	// AST REWRITE
                    	// elements:          
                    	// token labels:      
                    	// rule labels:       retval
                    	// token list labels: 
                    	// rule list labels:  
                    	// wildcard labels: 
                    	if ( (state.backtracking==0) ) {
                    	retval.Tree = root_0;
                    	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	root_0 = (CommonTree)adaptor.GetNilNode();
                    	// 1027:12: -> ^( SIGN_PLUS )
                    	{
                    	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1027:15: ^( SIGN_PLUS )
                    	    {
                    	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
                    	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(SIGN_PLUS, "SIGN_PLUS"), root_1);

                    	    adaptor.AddChild(root_0, root_1);
                    	    }

                    	}

                    	retval.Tree = root_0;retval.Tree = root_0;}
                    }
                    break;
                case 2 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1028:7: MINUS
                    {
                    	MINUS326=(IToken)Match(input,MINUS,FOLLOW_MINUS_in_unaryOperator8660); if (state.failed) return retval; 
                    	if ( (state.backtracking==0) ) stream_MINUS.Add(MINUS326);



                    	// AST REWRITE
                    	// elements:          
                    	// token labels:      
                    	// rule labels:       retval
                    	// token list labels: 
                    	// rule list labels:  
                    	// wildcard labels: 
                    	if ( (state.backtracking==0) ) {
                    	retval.Tree = root_0;
                    	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	root_0 = (CommonTree)adaptor.GetNilNode();
                    	// 1028:13: -> ^( SIGN_MINUS )
                    	{
                    	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1028:16: ^( SIGN_MINUS )
                    	    {
                    	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
                    	    root_1 = (CommonTree)adaptor.BecomeRoot((CommonTree)adaptor.Create(SIGN_MINUS, "SIGN_MINUS"), root_1);

                    	    adaptor.AddChild(root_0, root_1);
                    	    }

                    	}

                    	retval.Tree = root_0;retval.Tree = root_0;}
                    }
                    break;
                case 3 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1029:7: TILDE
                    {
                    	TILDE327=(IToken)Match(input,TILDE,FOLLOW_TILDE_in_unaryOperator8674); if (state.failed) return retval; 
                    	if ( (state.backtracking==0) ) stream_TILDE.Add(TILDE327);



                    	// AST REWRITE
                    	// elements:          TILDE
                    	// token labels:      
                    	// rule labels:       retval
                    	// token list labels: 
                    	// rule list labels:  
                    	// wildcard labels: 
                    	if ( (state.backtracking==0) ) {
                    	retval.Tree = root_0;
                    	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

                    	root_0 = (CommonTree)adaptor.GetNilNode();
                    	// 1029:13: -> ^( TILDE )
                    	{
                    	    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1029:16: ^( TILDE )
                    	    {
                    	    CommonTree root_1 = (CommonTree)adaptor.GetNilNode();
                    	    root_1 = (CommonTree)adaptor.BecomeRoot(stream_TILDE.NextNode(), root_1);

                    	    adaptor.AddChild(root_0, root_1);
                    	    }

                    	}

                    	retval.Tree = root_0;retval.Tree = root_0;}
                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 58, unaryOperator_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "unaryOperator"

    public class binaryOperator_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "binaryOperator"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1032:1: binaryOperator : ( arithmeticOperator | bitwiseOperator );
    public SqlParser.binaryOperator_return binaryOperator() // throws RecognitionException [1]
    {   
        SqlParser.binaryOperator_return retval = new SqlParser.binaryOperator_return();
        retval.Start = input.LT(1);
        int binaryOperator_StartIndex = input.Index();
        CommonTree root_0 = null;

        SqlParser.arithmeticOperator_return arithmeticOperator328 = default(SqlParser.arithmeticOperator_return);

        SqlParser.bitwiseOperator_return bitwiseOperator329 = default(SqlParser.bitwiseOperator_return);



        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 59) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1033:5: ( arithmeticOperator | bitwiseOperator )
            int alt112 = 2;
            int LA112_0 = input.LA(1);

            if ( (LA112_0 == STAR || (LA112_0 >= PLUS && LA112_0 <= MINUS) || (LA112_0 >= DIVIDE && LA112_0 <= MOD)) )
            {
                alt112 = 1;
            }
            else if ( ((LA112_0 >= AMPERSAND && LA112_0 <= BITWISEXOR) || LA112_0 == TILDE) )
            {
                alt112 = 2;
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                NoViableAltException nvae_d112s0 =
                    new NoViableAltException("", 112, 0, input);

                throw nvae_d112s0;
            }
            switch (alt112) 
            {
                case 1 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1033:7: arithmeticOperator
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_arithmeticOperator_in_binaryOperator8701);
                    	arithmeticOperator328 = arithmeticOperator();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, arithmeticOperator328.Tree);

                    }
                    break;
                case 2 :
                    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1033:28: bitwiseOperator
                    {
                    	root_0 = (CommonTree)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_bitwiseOperator_in_binaryOperator8705);
                    	bitwiseOperator329 = bitwiseOperator();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, bitwiseOperator329.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 59, binaryOperator_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "binaryOperator"

    public class arithmeticOperator_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "arithmeticOperator"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1036:1: arithmeticOperator : ( PLUS | MINUS | STAR | DIVIDE | MOD );
    public SqlParser.arithmeticOperator_return arithmeticOperator() // throws RecognitionException [1]
    {   
        SqlParser.arithmeticOperator_return retval = new SqlParser.arithmeticOperator_return();
        retval.Start = input.LT(1);
        int arithmeticOperator_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken set330 = null;

        CommonTree set330_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 60) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1037:5: ( PLUS | MINUS | STAR | DIVIDE | MOD )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	set330 = (IToken)input.LT(1);
            	if ( input.LA(1) == STAR || (input.LA(1) >= PLUS && input.LA(1) <= MINUS) || (input.LA(1) >= DIVIDE && input.LA(1) <= MOD) ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (CommonTree)adaptor.Create(set330));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 60, arithmeticOperator_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "arithmeticOperator"

    public class bitwiseOperator_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "bitwiseOperator"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1040:1: bitwiseOperator : ( AMPERSAND | TILDE | BITWISEOR | BITWISEXOR );
    public SqlParser.bitwiseOperator_return bitwiseOperator() // throws RecognitionException [1]
    {   
        SqlParser.bitwiseOperator_return retval = new SqlParser.bitwiseOperator_return();
        retval.Start = input.LT(1);
        int bitwiseOperator_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken set331 = null;

        CommonTree set331_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 61) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1041:5: ( AMPERSAND | TILDE | BITWISEOR | BITWISEXOR )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	set331 = (IToken)input.LT(1);
            	if ( (input.LA(1) >= AMPERSAND && input.LA(1) <= BITWISEXOR) || input.LA(1) == TILDE ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (CommonTree)adaptor.Create(set331));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 61, bitwiseOperator_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "bitwiseOperator"

    public class comparisonOperator_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "comparisonOperator"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1044:1: comparisonOperator : ( ASSIGNEQUAL | NOTEQUAL1 | NOTEQUAL2 | LESSTHANOREQUALTO1 | LESSTHANOREQUALTO2 | LESSTHAN | GREATERTHANOREQUALTO1 | GREATERTHANOREQUALTO2 | GREATERTHAN );
    public SqlParser.comparisonOperator_return comparisonOperator() // throws RecognitionException [1]
    {   
        SqlParser.comparisonOperator_return retval = new SqlParser.comparisonOperator_return();
        retval.Start = input.LT(1);
        int comparisonOperator_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken set332 = null;

        CommonTree set332_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 62) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1045:5: ( ASSIGNEQUAL | NOTEQUAL1 | NOTEQUAL2 | LESSTHANOREQUALTO1 | LESSTHANOREQUALTO2 | LESSTHAN | GREATERTHANOREQUALTO1 | GREATERTHANOREQUALTO2 | GREATERTHAN )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	set332 = (IToken)input.LT(1);
            	if ( input.LA(1) == ASSIGNEQUAL || (input.LA(1) >= NOTEQUAL1 && input.LA(1) <= GREATERTHAN) ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (CommonTree)adaptor.Create(set332));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 62, comparisonOperator_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "comparisonOperator"

    public class logicalOperator_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "logicalOperator"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1050:1: logicalOperator : ( ALL | AND | ANY | BETWEEN | EXISTS | IN | LIKE | NOT | OR | SOME );
    public SqlParser.logicalOperator_return logicalOperator() // throws RecognitionException [1]
    {   
        SqlParser.logicalOperator_return retval = new SqlParser.logicalOperator_return();
        retval.Start = input.LT(1);
        int logicalOperator_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken set333 = null;

        CommonTree set333_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 63) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1051:5: ( ALL | AND | ANY | BETWEEN | EXISTS | IN | LIKE | NOT | OR | SOME )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	set333 = (IToken)input.LT(1);
            	if ( input.LA(1) == ALL || (input.LA(1) >= AND && input.LA(1) <= ANY) || input.LA(1) == BETWEEN || input.LA(1) == EXISTS || input.LA(1) == IN || input.LA(1) == LIKE || input.LA(1) == NOT || input.LA(1) == OR || input.LA(1) == SOME ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (CommonTree)adaptor.Create(set333));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 63, logicalOperator_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "logicalOperator"

    public class unionOperator_return : ParserRuleReturnScope
    {
        private CommonTree tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (CommonTree) value; }
        }
    };

    // $ANTLR start "unionOperator"
    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1054:1: unionOperator : UNION ( ALL )? ;
    public SqlParser.unionOperator_return unionOperator() // throws RecognitionException [1]
    {   
        SqlParser.unionOperator_return retval = new SqlParser.unionOperator_return();
        retval.Start = input.LT(1);
        int unionOperator_StartIndex = input.Index();
        CommonTree root_0 = null;

        IToken UNION334 = null;
        IToken ALL335 = null;

        CommonTree UNION334_tree=null;
        CommonTree ALL335_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 64) ) 
    	    {
    	    	return retval; 
    	    }
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1055:5: ( UNION ( ALL )? )
            // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1055:7: UNION ( ALL )?
            {
            	root_0 = (CommonTree)adaptor.GetNilNode();

            	UNION334=(IToken)Match(input,UNION,FOLLOW_UNION_in_unionOperator8908); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{UNION334_tree = (CommonTree)adaptor.Create(UNION334);
            		adaptor.AddChild(root_0, UNION334_tree);
            	}
            	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1055:13: ( ALL )?
            	int alt113 = 2;
            	int LA113_0 = input.LA(1);

            	if ( (LA113_0 == ALL) )
            	{
            	    alt113 = 1;
            	}
            	switch (alt113) 
            	{
            	    case 1 :
            	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:1055:14: ALL
            	        {
            	        	ALL335=(IToken)Match(input,ALL,FOLLOW_ALL_in_unionOperator8911); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{ALL335_tree = (CommonTree)adaptor.Create(ALL335);
            	        		adaptor.AddChild(root_0, ALL335_tree);
            	        	}

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 64, unionOperator_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "unionOperator"

    // $ANTLR start "synpred57_Sql"
    public void synpred57_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:556:11: ( LPAREN ( ( searchCondition )=> searchCondition ) RPAREN )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:556:11: LPAREN ( ( searchCondition )=> searchCondition ) RPAREN
        {
        	Match(input,LPAREN,FOLLOW_LPAREN_in_synpred57_Sql4433); if (state.failed) return ;
        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:556:19: ( ( searchCondition )=> searchCondition )
        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:556:21: ( searchCondition )=> searchCondition
        	{
        		PushFollow(FOLLOW_searchCondition_in_synpred57_Sql4444);
        		searchCondition();
        		state.followingStackPointer--;
        		if (state.failed) return ;

        	}

        	Match(input,RPAREN,FOLLOW_RPAREN_in_synpred57_Sql4448); if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred57_Sql"

    // $ANTLR start "synpred68_Sql"
    public void synpred68_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:588:17: ( selectStatement )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:588:18: selectStatement
        {
        	PushFollow(FOLLOW_selectStatement_in_synpred68_Sql4939);
        	selectStatement();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred68_Sql"

    // $ANTLR start "synpred78_Sql"
    public void synpred78_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:615:7: ( alias2 )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:615:8: alias2
        {
        	PushFollow(FOLLOW_alias2_in_synpred78_Sql5282);
        	alias2();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred78_Sql"

    // $ANTLR start "synpred79_Sql"
    public void synpred79_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:616:11: ( alias2 dbObject COMMA )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:616:12: alias2 dbObject COMMA
        {
        	PushFollow(FOLLOW_alias2_in_synpred79_Sql5300);
        	alias2();
        	state.followingStackPointer--;
        	if (state.failed) return ;
        	PushFollow(FOLLOW_dbObject_in_synpred79_Sql5302);
        	dbObject();
        	state.followingStackPointer--;
        	if (state.failed) return ;
        	Match(input,COMMA,FOLLOW_COMMA_in_synpred79_Sql5304); if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred79_Sql"

    // $ANTLR start "synpred81_Sql"
    public void synpred81_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:618:11: ( alias2 dbObject ( binaryOperator | LPAREN ) )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:618:12: alias2 dbObject ( binaryOperator | LPAREN )
        {
        	PushFollow(FOLLOW_alias2_in_synpred81_Sql5344);
        	alias2();
        	state.followingStackPointer--;
        	if (state.failed) return ;
        	PushFollow(FOLLOW_dbObject_in_synpred81_Sql5346);
        	dbObject();
        	state.followingStackPointer--;
        	if (state.failed) return ;
        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:618:28: ( binaryOperator | LPAREN )
        	int alt147 = 2;
        	int LA147_0 = input.LA(1);

        	if ( (LA147_0 == STAR || (LA147_0 >= PLUS && LA147_0 <= MOD) || LA147_0 == TILDE) )
        	{
        	    alt147 = 1;
        	}
        	else if ( (LA147_0 == LPAREN) )
        	{
        	    alt147 = 2;
        	}
        	else 
        	{
        	    if ( state.backtracking > 0 ) {state.failed = true; return ;}
        	    NoViableAltException nvae_d147s0 =
        	        new NoViableAltException("", 147, 0, input);

        	    throw nvae_d147s0;
        	}
        	switch (alt147) 
        	{
        	    case 1 :
        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:618:29: binaryOperator
        	        {
        	        	PushFollow(FOLLOW_binaryOperator_in_synpred81_Sql5349);
        	        	binaryOperator();
        	        	state.followingStackPointer--;
        	        	if (state.failed) return ;

        	        }
        	        break;
        	    case 2 :
        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:618:46: LPAREN
        	        {
        	        	Match(input,LPAREN,FOLLOW_LPAREN_in_synpred81_Sql5353); if (state.failed) return ;

        	        }
        	        break;

        	}


        }
    }
    // $ANTLR end "synpred81_Sql"

    // $ANTLR start "synpred82_Sql"
    public void synpred82_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:620:11: ( alias2 column )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:620:12: alias2 column
        {
        	PushFollow(FOLLOW_alias2_in_synpred82_Sql5394);
        	alias2();
        	state.followingStackPointer--;
        	if (state.failed) return ;
        	PushFollow(FOLLOW_column_in_synpred82_Sql5396);
        	column();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred82_Sql"

    // $ANTLR start "synpred83_Sql"
    public void synpred83_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:622:11: ( alias2 expression )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:622:12: alias2 expression
        {
        	PushFollow(FOLLOW_alias2_in_synpred83_Sql5436);
        	alias2();
        	state.followingStackPointer--;
        	if (state.failed) return ;
        	PushFollow(FOLLOW_expression_in_synpred83_Sql5438);
        	expression();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred83_Sql"

    // $ANTLR start "synpred84_Sql"
    public void synpred84_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:627:7: ( tableColumns )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:627:8: tableColumns
        {
        	PushFollow(FOLLOW_tableColumns_in_synpred84_Sql5492);
        	tableColumns();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred84_Sql"

    // $ANTLR start "synpred86_Sql"
    public void synpred86_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:631:7: ( dbObject ( alias1 )? COMMA )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:631:8: dbObject ( alias1 )? COMMA
        {
        	PushFollow(FOLLOW_dbObject_in_synpred86_Sql5530);
        	dbObject();
        	state.followingStackPointer--;
        	if (state.failed) return ;
        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:631:17: ( alias1 )?
        	int alt148 = 2;
        	int LA148_0 = input.LA(1);

        	if ( (LA148_0 == AS || LA148_0 == AUTO || LA148_0 == BASE64 || LA148_0 == BINARY || LA148_0 == CAST || LA148_0 == CONCAT || LA148_0 == CUBE || LA148_0 == ELEMENTS || (LA148_0 >= EXPAND && LA148_0 <= FASTFIRSTROW) || LA148_0 == FORCE || LA148_0 == HASH || (LA148_0 >= KEEP && LA148_0 <= KEEPFIXED) || (LA148_0 >= LOOP && LA148_0 <= MERGE) || LA148_0 == NOLOCK || LA148_0 == PAGLOCK || LA148_0 == RAW || (LA148_0 >= READCOMMITED && LA148_0 <= READPAST) || LA148_0 == READUNCOMMITED || (LA148_0 >= REMOTE && LA148_0 <= REPEATABLEREAD) || LA148_0 == ROBUST || LA148_0 == ROLLUP || LA148_0 == ROWLOCK || LA148_0 == SERIALIZABLE || (LA148_0 >= TABLOCK && LA148_0 <= TABLOCKX) || LA148_0 == TIES || LA148_0 == UPDLOCK || LA148_0 == VIEWS || (LA148_0 >= XLOCK && LA148_0 <= XMLDATA) || (LA148_0 >= UnicodeStringLiteral && LA148_0 <= QuotedIdentifier)) )
        	{
        	    alt148 = 1;
        	}
        	switch (alt148) 
        	{
        	    case 1 :
        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:631:18: alias1
        	        {
        	        	PushFollow(FOLLOW_alias1_in_synpred86_Sql5533);
        	        	alias1();
        	        	state.followingStackPointer--;
        	        	if (state.failed) return ;

        	        }
        	        break;

        	}

        	Match(input,COMMA,FOLLOW_COMMA_in_synpred86_Sql5537); if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred86_Sql"

    // $ANTLR start "synpred89_Sql"
    public void synpred89_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:633:7: ( dbObject ( binaryOperator | LPAREN ) )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:633:8: dbObject ( binaryOperator | LPAREN )
        {
        	PushFollow(FOLLOW_dbObject_in_synpred89_Sql5571);
        	dbObject();
        	state.followingStackPointer--;
        	if (state.failed) return ;
        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:633:17: ( binaryOperator | LPAREN )
        	int alt149 = 2;
        	int LA149_0 = input.LA(1);

        	if ( (LA149_0 == STAR || (LA149_0 >= PLUS && LA149_0 <= MOD) || LA149_0 == TILDE) )
        	{
        	    alt149 = 1;
        	}
        	else if ( (LA149_0 == LPAREN) )
        	{
        	    alt149 = 2;
        	}
        	else 
        	{
        	    if ( state.backtracking > 0 ) {state.failed = true; return ;}
        	    NoViableAltException nvae_d149s0 =
        	        new NoViableAltException("", 149, 0, input);

        	    throw nvae_d149s0;
        	}
        	switch (alt149) 
        	{
        	    case 1 :
        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:633:18: binaryOperator
        	        {
        	        	PushFollow(FOLLOW_binaryOperator_in_synpred89_Sql5574);
        	        	binaryOperator();
        	        	state.followingStackPointer--;
        	        	if (state.failed) return ;

        	        }
        	        break;
        	    case 2 :
        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:633:35: LPAREN
        	        {
        	        	Match(input,LPAREN,FOLLOW_LPAREN_in_synpred89_Sql5578); if (state.failed) return ;

        	        }
        	        break;

        	}


        }
    }
    // $ANTLR end "synpred89_Sql"

    // $ANTLR start "synpred91_Sql"
    public void synpred91_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:637:7: ( column )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:637:8: column
        {
        	PushFollow(FOLLOW_column_in_synpred91_Sql5626);
        	column();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred91_Sql"

    // $ANTLR start "synpred93_Sql"
    public void synpred93_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:639:7: ( expression )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:639:8: expression
        {
        	PushFollow(FOLLOW_expression_in_synpred93_Sql5660);
        	expression();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred93_Sql"

    // $ANTLR start "synpred101_Sql"
    public void synpred101_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:667:5: ( joinedTables )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:667:5: joinedTables
        {
        	PushFollow(FOLLOW_joinedTables_in_synpred101_Sql5876);
        	joinedTables();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred101_Sql"

    // $ANTLR start "synpred102_Sql"
    public void synpred102_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:676:13: ( joinedTables )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:676:14: joinedTables
        {
        	PushFollow(FOLLOW_joinedTables_in_synpred102_Sql5940);
        	joinedTables();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred102_Sql"

    // $ANTLR start "synpred103_Sql"
    public void synpred103_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:678:13: ( queryExpression )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:678:14: queryExpression
        {
        	PushFollow(FOLLOW_queryExpression_in_synpred103_Sql5978);
        	queryExpression();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred103_Sql"

    // $ANTLR start "synpred105_Sql"
    public void synpred105_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:685:17: ( alias1 )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:685:17: alias1
        {
        	PushFollow(FOLLOW_alias1_in_synpred105_Sql6043);
        	alias1();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred105_Sql"

    // $ANTLR start "synpred106_Sql"
    public void synpred106_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:685:7: ( function ( alias1 )? )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:685:7: function ( alias1 )?
        {
        	PushFollow(FOLLOW_function_in_synpred106_Sql6040);
        	function();
        	state.followingStackPointer--;
        	if (state.failed) return ;
        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:685:16: ( alias1 )?
        	int alt151 = 2;
        	int LA151_0 = input.LA(1);

        	if ( (LA151_0 == AS || LA151_0 == AUTO || LA151_0 == BASE64 || LA151_0 == BINARY || LA151_0 == CAST || LA151_0 == CONCAT || LA151_0 == CUBE || LA151_0 == ELEMENTS || (LA151_0 >= EXPAND && LA151_0 <= FASTFIRSTROW) || LA151_0 == FORCE || LA151_0 == HASH || (LA151_0 >= KEEP && LA151_0 <= KEEPFIXED) || (LA151_0 >= LOOP && LA151_0 <= MERGE) || LA151_0 == NOLOCK || LA151_0 == PAGLOCK || LA151_0 == RAW || (LA151_0 >= READCOMMITED && LA151_0 <= READPAST) || LA151_0 == READUNCOMMITED || (LA151_0 >= REMOTE && LA151_0 <= REPEATABLEREAD) || LA151_0 == ROBUST || LA151_0 == ROLLUP || LA151_0 == ROWLOCK || LA151_0 == SERIALIZABLE || (LA151_0 >= TABLOCK && LA151_0 <= TABLOCKX) || LA151_0 == TIES || LA151_0 == UPDLOCK || LA151_0 == VIEWS || (LA151_0 >= XLOCK && LA151_0 <= XMLDATA) || (LA151_0 >= UnicodeStringLiteral && LA151_0 <= QuotedIdentifier)) )
        	{
        	    alt151 = 1;
        	}
        	switch (alt151) 
        	{
        	    case 1 :
        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:685:17: alias1
        	        {
        	        	PushFollow(FOLLOW_alias1_in_synpred106_Sql6043);
        	        	alias1();
        	        	state.followingStackPointer--;
        	        	if (state.failed) return ;

        	        }
        	        break;

        	}


        }
    }
    // $ANTLR end "synpred106_Sql"

    // $ANTLR start "synpred107_Sql"
    public void synpred107_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:17: ( alias1 )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:17: alias1
        {
        	PushFollow(FOLLOW_alias1_in_synpred107_Sql6077);
        	alias1();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred107_Sql"

    // $ANTLR start "synpred111_Sql"
    public void synpred111_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:7: ( dbObject ( alias1 )? ( ( WITH )? LPAREN tableHint ( COMMA tableHint )* RPAREN )? )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:7: dbObject ( alias1 )? ( ( WITH )? LPAREN tableHint ( COMMA tableHint )* RPAREN )?
        {
        	PushFollow(FOLLOW_dbObject_in_synpred111_Sql6074);
        	dbObject();
        	state.followingStackPointer--;
        	if (state.failed) return ;
        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:16: ( alias1 )?
        	int alt154 = 2;
        	int LA154_0 = input.LA(1);

        	if ( (LA154_0 == AS || LA154_0 == AUTO || LA154_0 == BASE64 || LA154_0 == BINARY || LA154_0 == CAST || LA154_0 == CONCAT || LA154_0 == CUBE || LA154_0 == ELEMENTS || (LA154_0 >= EXPAND && LA154_0 <= FASTFIRSTROW) || LA154_0 == FORCE || LA154_0 == HASH || (LA154_0 >= KEEP && LA154_0 <= KEEPFIXED) || (LA154_0 >= LOOP && LA154_0 <= MERGE) || LA154_0 == NOLOCK || LA154_0 == PAGLOCK || LA154_0 == RAW || (LA154_0 >= READCOMMITED && LA154_0 <= READPAST) || LA154_0 == READUNCOMMITED || (LA154_0 >= REMOTE && LA154_0 <= REPEATABLEREAD) || LA154_0 == ROBUST || LA154_0 == ROLLUP || LA154_0 == ROWLOCK || LA154_0 == SERIALIZABLE || (LA154_0 >= TABLOCK && LA154_0 <= TABLOCKX) || LA154_0 == TIES || LA154_0 == UPDLOCK || LA154_0 == VIEWS || (LA154_0 >= XLOCK && LA154_0 <= XMLDATA) || (LA154_0 >= UnicodeStringLiteral && LA154_0 <= QuotedIdentifier)) )
        	{
        	    alt154 = 1;
        	}
        	switch (alt154) 
        	{
        	    case 1 :
        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:17: alias1
        	        {
        	        	PushFollow(FOLLOW_alias1_in_synpred111_Sql6077);
        	        	alias1();
        	        	state.followingStackPointer--;
        	        	if (state.failed) return ;

        	        }
        	        break;

        	}

        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:26: ( ( WITH )? LPAREN tableHint ( COMMA tableHint )* RPAREN )?
        	int alt157 = 2;
        	int LA157_0 = input.LA(1);

        	if ( (LA157_0 == WITH || LA157_0 == LPAREN) )
        	{
        	    alt157 = 1;
        	}
        	switch (alt157) 
        	{
        	    case 1 :
        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:28: ( WITH )? LPAREN tableHint ( COMMA tableHint )* RPAREN
        	        {
        	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:28: ( WITH )?
        	        	int alt155 = 2;
        	        	int LA155_0 = input.LA(1);

        	        	if ( (LA155_0 == WITH) )
        	        	{
        	        	    alt155 = 1;
        	        	}
        	        	switch (alt155) 
        	        	{
        	        	    case 1 :
        	        	        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:29: WITH
        	        	        {
        	        	        	Match(input,WITH,FOLLOW_WITH_in_synpred111_Sql6084); if (state.failed) return ;

        	        	        }
        	        	        break;

        	        	}

        	        	Match(input,LPAREN,FOLLOW_LPAREN_in_synpred111_Sql6088); if (state.failed) return ;
        	        	PushFollow(FOLLOW_tableHint_in_synpred111_Sql6090);
        	        	tableHint();
        	        	state.followingStackPointer--;
        	        	if (state.failed) return ;
        	        	// C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:53: ( COMMA tableHint )*
        	        	do 
        	        	{
        	        	    int alt156 = 2;
        	        	    int LA156_0 = input.LA(1);

        	        	    if ( (LA156_0 == COMMA) )
        	        	    {
        	        	        alt156 = 1;
        	        	    }


        	        	    switch (alt156) 
        	        		{
        	        			case 1 :
        	        			    // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:689:54: COMMA tableHint
        	        			    {
        	        			    	Match(input,COMMA,FOLLOW_COMMA_in_synpred111_Sql6093); if (state.failed) return ;
        	        			    	PushFollow(FOLLOW_tableHint_in_synpred111_Sql6095);
        	        			    	tableHint();
        	        			    	state.followingStackPointer--;
        	        			    	if (state.failed) return ;

        	        			    }
        	        			    break;

        	        			default:
        	        			    goto loop156;
        	        	    }
        	        	} while (true);

        	        	loop156:
        	        		;	// Stops C# compiler whining that label 'loop156' has no statements

        	        	Match(input,RPAREN,FOLLOW_RPAREN_in_synpred111_Sql6099); if (state.failed) return ;

        	        }
        	        break;

        	}


        }
    }
    // $ANTLR end "synpred111_Sql"

    // $ANTLR start "synpred112_Sql"
    public void synpred112_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:691:17: ( alias1 )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:691:17: alias1
        {
        	PushFollow(FOLLOW_alias1_in_synpred112_Sql6128);
        	alias1();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred112_Sql"

    // $ANTLR start "synpred114_Sql"
    public void synpred114_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:698:30: ( alias1 )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:698:30: alias1
        {
        	PushFollow(FOLLOW_alias1_in_synpred114_Sql6167);
        	alias1();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred114_Sql"

    // $ANTLR start "synpred151_Sql"
    public void synpred151_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:796:22: ( ( PLUS | MINUS | AMPERSAND | BITWISEOR | BITWISEXOR ) arithMultsOp )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:796:22: ( PLUS | MINUS | AMPERSAND | BITWISEOR | BITWISEXOR ) arithMultsOp
        {
        	if ( (input.LA(1) >= PLUS && input.LA(1) <= BITWISEXOR) ) 
        	{
        	    input.Consume();
        	    state.errorRecovery = false;state.failed = false;
        	}
        	else 
        	{
        	    if ( state.backtracking > 0 ) {state.failed = true; return ;}
        	    MismatchedSetException mse = new MismatchedSetException(null,input);
        	    throw mse;
        	}

        	PushFollow(FOLLOW_arithMultsOp_in_synpred151_Sql6916);
        	arithMultsOp();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred151_Sql"

    // $ANTLR start "synpred157_Sql"
    public void synpred157_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:814:7: ( castFunction )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:814:7: castFunction
        {
        	PushFollow(FOLLOW_castFunction_in_synpred157_Sql7022);
        	castFunction();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred157_Sql"

    // $ANTLR start "synpred161_Sql"
    public void synpred161_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:818:7: ( function )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:818:8: function
        {
        	PushFollow(FOLLOW_function_in_synpred161_Sql7055);
        	function();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred161_Sql"

    // $ANTLR start "synpred162_Sql"
    public void synpred162_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:820:11: ( selectStatement )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:820:12: selectStatement
        {
        	PushFollow(FOLLOW_selectStatement_in_synpred162_Sql7084);
        	selectStatement();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred162_Sql"

    // $ANTLR start "synpred185_Sql"
    public void synpred185_Sql_fragment() {
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:905:11: ( DOT DOT )
        // C:\\Users\\gbc3\\Documents\\Visual Studio 2010\\Projects\\SqlAntlr\\SqlAntlr\\Sql.g:905:12: DOT DOT
        {
        	Match(input,DOT,FOLLOW_DOT_in_synpred185_Sql7776); if (state.failed) return ;
        	Match(input,DOT,FOLLOW_DOT_in_synpred185_Sql7778); if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred185_Sql"

    // Delegated rules

   	public bool synpred68_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred68_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred105_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred105_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred79_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred79_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred107_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred107_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred103_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred103_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred57_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred57_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred89_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred89_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred106_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred106_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred93_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred93_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred84_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred84_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred151_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred151_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred157_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred157_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred83_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred83_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred112_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred112_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred161_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred161_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred78_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred78_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred102_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred102_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred162_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred162_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred91_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred91_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred82_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred82_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred101_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred101_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred86_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred86_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred185_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred185_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred81_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred81_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred114_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred114_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred111_Sql() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred111_Sql_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}


   	protected DFA9 dfa9;
   	protected DFA14 dfa14;
   	protected DFA11 dfa11;
   	protected DFA13 dfa13;
   	protected DFA12 dfa12;
   	protected DFA15 dfa15;
   	protected DFA18 dfa18;
   	protected DFA16 dfa16;
   	protected DFA17 dfa17;
   	protected DFA19 dfa19;
   	protected DFA20 dfa20;
   	protected DFA21 dfa21;
   	protected DFA23 dfa23;
   	protected DFA24 dfa24;
   	protected DFA26 dfa26;
   	protected DFA28 dfa28;
   	protected DFA35 dfa35;
   	protected DFA36 dfa36;
   	protected DFA37 dfa37;
   	protected DFA38 dfa38;
   	protected DFA52 dfa52;
   	protected DFA40 dfa40;
   	protected DFA43 dfa43;
   	protected DFA45 dfa45;
   	protected DFA59 dfa59;
   	protected DFA58 dfa58;
   	protected DFA53 dfa53;
   	protected DFA54 dfa54;
   	protected DFA55 dfa55;
   	protected DFA56 dfa56;
   	protected DFA57 dfa57;
   	protected DFA60 dfa60;
   	protected DFA65 dfa65;
   	protected DFA74 dfa74;
   	protected DFA66 dfa66;
   	protected DFA67 dfa67;
   	protected DFA68 dfa68;
   	protected DFA71 dfa71;
   	protected DFA72 dfa72;
   	protected DFA73 dfa73;
   	protected DFA77 dfa77;
   	protected DFA82 dfa82;
   	protected DFA88 dfa88;
   	protected DFA89 dfa89;
   	protected DFA90 dfa90;
   	protected DFA91 dfa91;
   	protected DFA93 dfa93;
   	protected DFA92 dfa92;
   	protected DFA94 dfa94;
   	protected DFA99 dfa99;
   	protected DFA97 dfa97;
   	protected DFA101 dfa101;
   	protected DFA104 dfa104;
   	protected DFA109 dfa109;
	private void InitializeCyclicDFAs()
	{
    	this.dfa9 = new DFA9(this);
    	this.dfa14 = new DFA14(this);
    	this.dfa11 = new DFA11(this);
    	this.dfa13 = new DFA13(this);
    	this.dfa12 = new DFA12(this);
    	this.dfa15 = new DFA15(this);
    	this.dfa18 = new DFA18(this);
    	this.dfa16 = new DFA16(this);
    	this.dfa17 = new DFA17(this);
    	this.dfa19 = new DFA19(this);
    	this.dfa20 = new DFA20(this);
    	this.dfa21 = new DFA21(this);
    	this.dfa23 = new DFA23(this);
    	this.dfa24 = new DFA24(this);
    	this.dfa26 = new DFA26(this);
    	this.dfa28 = new DFA28(this);
    	this.dfa35 = new DFA35(this);
    	this.dfa36 = new DFA36(this);
    	this.dfa37 = new DFA37(this);
    	this.dfa38 = new DFA38(this);
    	this.dfa52 = new DFA52(this);
    	this.dfa40 = new DFA40(this);
    	this.dfa43 = new DFA43(this);
    	this.dfa45 = new DFA45(this);
    	this.dfa59 = new DFA59(this);
    	this.dfa58 = new DFA58(this);
    	this.dfa53 = new DFA53(this);
    	this.dfa54 = new DFA54(this);
    	this.dfa55 = new DFA55(this);
    	this.dfa56 = new DFA56(this);
    	this.dfa57 = new DFA57(this);
    	this.dfa60 = new DFA60(this);
    	this.dfa65 = new DFA65(this);
    	this.dfa74 = new DFA74(this);
    	this.dfa66 = new DFA66(this);
    	this.dfa67 = new DFA67(this);
    	this.dfa68 = new DFA68(this);
    	this.dfa71 = new DFA71(this);
    	this.dfa72 = new DFA72(this);
    	this.dfa73 = new DFA73(this);
    	this.dfa77 = new DFA77(this);
    	this.dfa82 = new DFA82(this);
    	this.dfa88 = new DFA88(this);
    	this.dfa89 = new DFA89(this);
    	this.dfa90 = new DFA90(this);
    	this.dfa91 = new DFA91(this);
    	this.dfa93 = new DFA93(this);
    	this.dfa92 = new DFA92(this);
    	this.dfa94 = new DFA94(this);
    	this.dfa99 = new DFA99(this);
    	this.dfa97 = new DFA97(this);
    	this.dfa101 = new DFA101(this);
    	this.dfa104 = new DFA104(this);
    	this.dfa109 = new DFA109(this);
	    this.dfa38.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA38_SpecialStateTransition);
	    this.dfa45.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA45_SpecialStateTransition);
	    this.dfa58.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA58_SpecialStateTransition);
	    this.dfa53.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA53_SpecialStateTransition);
	    this.dfa65.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA65_SpecialStateTransition);
	    this.dfa74.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA74_SpecialStateTransition);
	    this.dfa66.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA66_SpecialStateTransition);
	    this.dfa67.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA67_SpecialStateTransition);
	    this.dfa68.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA68_SpecialStateTransition);
	    this.dfa72.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA72_SpecialStateTransition);
	    this.dfa73.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA73_SpecialStateTransition);
	    this.dfa89.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA89_SpecialStateTransition);
	    this.dfa93.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA93_SpecialStateTransition);
	    this.dfa92.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA92_SpecialStateTransition);
	    this.dfa109.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA109_SpecialStateTransition);
	}

    const string DFA9_eotS =
        "\x0a\uffff";
    const string DFA9_eofS =
        "\x01\x01\x09\uffff";
    const string DFA9_minS =
        "\x01\x3c\x09\uffff";
    const string DFA9_maxS =
        "\x01\u0112\x09\uffff";
    const string DFA9_acceptS =
        "\x01\uffff\x01\x02\x07\uffff\x01\x01";
    const string DFA9_specialS =
        "\x0a\uffff}>";
    static readonly string[] DFA9_transitionS = {
            "\x01\x01\x21\uffff\x01\x01\x0b\uffff\x01\x01\x15\uffff\x01"+
            "\x09\x1d\uffff\x01\x01\x01\uffff\x01\x01\x3a\uffff\x01\x01\x34"+
            "\uffff\x01\x01\x01\uffff\x01\x01",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA9_eot = DFA.UnpackEncodedString(DFA9_eotS);
    static readonly short[] DFA9_eof = DFA.UnpackEncodedString(DFA9_eofS);
    static readonly char[] DFA9_min = DFA.UnpackEncodedStringToUnsignedChars(DFA9_minS);
    static readonly char[] DFA9_max = DFA.UnpackEncodedStringToUnsignedChars(DFA9_maxS);
    static readonly short[] DFA9_accept = DFA.UnpackEncodedString(DFA9_acceptS);
    static readonly short[] DFA9_special = DFA.UnpackEncodedString(DFA9_specialS);
    static readonly short[][] DFA9_transition = DFA.UnpackEncodedStringArray(DFA9_transitionS);

    protected class DFA9 : DFA
    {
        public DFA9(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 9;
            this.eot = DFA9_eot;
            this.eof = DFA9_eof;
            this.min = DFA9_min;
            this.max = DFA9_max;
            this.accept = DFA9_accept;
            this.special = DFA9_special;
            this.transition = DFA9_transition;

        }

        override public string Description
        {
            get { return "()* loopback of 418:26: ( INTERSECT ( ALL )? subQueryExpression )*"; }
        }

    }

    const string DFA14_eotS =
        "\x0b\uffff";
    const string DFA14_eofS =
        "\x01\x02\x0a\uffff";
    const string DFA14_minS =
        "\x01\x3c\x0a\uffff";
    const string DFA14_maxS =
        "\x01\u0112\x0a\uffff";
    const string DFA14_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x08\uffff";
    const string DFA14_specialS =
        "\x0b\uffff}>";
    static readonly string[] DFA14_transitionS = {
            "\x01\x02\x21\uffff\x01\x02\x0b\uffff\x01\x02\x04\uffff\x01"+
            "\x01\x10\uffff\x01\x02\x1d\uffff\x01\x02\x01\uffff\x01\x02\x3a"+
            "\uffff\x01\x02\x34\uffff\x01\x02\x01\uffff\x01\x02",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA14_eot = DFA.UnpackEncodedString(DFA14_eotS);
    static readonly short[] DFA14_eof = DFA.UnpackEncodedString(DFA14_eofS);
    static readonly char[] DFA14_min = DFA.UnpackEncodedStringToUnsignedChars(DFA14_minS);
    static readonly char[] DFA14_max = DFA.UnpackEncodedStringToUnsignedChars(DFA14_maxS);
    static readonly short[] DFA14_accept = DFA.UnpackEncodedString(DFA14_acceptS);
    static readonly short[] DFA14_special = DFA.UnpackEncodedString(DFA14_specialS);
    static readonly short[][] DFA14_transition = DFA.UnpackEncodedStringArray(DFA14_transitionS);

    protected class DFA14 : DFA
    {
        public DFA14(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 14;
            this.eot = DFA14_eot;
            this.eof = DFA14_eof;
            this.min = DFA14_min;
            this.max = DFA14_max;
            this.accept = DFA14_accept;
            this.special = DFA14_special;
            this.transition = DFA14_transition;

        }

        override public string Description
        {
            get { return "451:5: ( ( fromClause ) ( whereClause )? ( groupByClause ( havingClause )? )? )?"; }
        }

    }

    const string DFA11_eotS =
        "\x0c\uffff";
    const string DFA11_eofS =
        "\x01\x02\x0b\uffff";
    const string DFA11_minS =
        "\x01\x3c\x0b\uffff";
    const string DFA11_maxS =
        "\x01\u0112\x0b\uffff";
    const string DFA11_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x09\uffff";
    const string DFA11_specialS =
        "\x0c\uffff}>";
    static readonly string[] DFA11_transitionS = {
            "\x01\x02\x21\uffff\x01\x02\x0b\uffff\x01\x02\x09\uffff\x01"+
            "\x02\x0b\uffff\x01\x02\x1d\uffff\x01\x02\x01\uffff\x01\x02\x3a"+
            "\uffff\x01\x02\x0c\uffff\x01\x01\x27\uffff\x01\x02\x01\uffff"+
            "\x01\x02",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA11_eot = DFA.UnpackEncodedString(DFA11_eotS);
    static readonly short[] DFA11_eof = DFA.UnpackEncodedString(DFA11_eofS);
    static readonly char[] DFA11_min = DFA.UnpackEncodedStringToUnsignedChars(DFA11_minS);
    static readonly char[] DFA11_max = DFA.UnpackEncodedStringToUnsignedChars(DFA11_maxS);
    static readonly short[] DFA11_accept = DFA.UnpackEncodedString(DFA11_acceptS);
    static readonly short[] DFA11_special = DFA.UnpackEncodedString(DFA11_specialS);
    static readonly short[][] DFA11_transition = DFA.UnpackEncodedStringArray(DFA11_transitionS);

    protected class DFA11 : DFA
    {
        public DFA11(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 11;
            this.eot = DFA11_eot;
            this.eof = DFA11_eof;
            this.min = DFA11_min;
            this.max = DFA11_max;
            this.accept = DFA11_accept;
            this.special = DFA11_special;
            this.transition = DFA11_transition;

        }

        override public string Description
        {
            get { return "452:5: ( whereClause )?"; }
        }

    }

    const string DFA13_eotS =
        "\x0b\uffff";
    const string DFA13_eofS =
        "\x01\x02\x0a\uffff";
    const string DFA13_minS =
        "\x01\x3c\x0a\uffff";
    const string DFA13_maxS =
        "\x01\u0112\x0a\uffff";
    const string DFA13_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x08\uffff";
    const string DFA13_specialS =
        "\x0b\uffff}>";
    static readonly string[] DFA13_transitionS = {
            "\x01\x02\x21\uffff\x01\x02\x0b\uffff\x01\x02\x09\uffff\x01"+
            "\x01\x0b\uffff\x01\x02\x1d\uffff\x01\x02\x01\uffff\x01\x02\x3a"+
            "\uffff\x01\x02\x34\uffff\x01\x02\x01\uffff\x01\x02",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA13_eot = DFA.UnpackEncodedString(DFA13_eotS);
    static readonly short[] DFA13_eof = DFA.UnpackEncodedString(DFA13_eofS);
    static readonly char[] DFA13_min = DFA.UnpackEncodedStringToUnsignedChars(DFA13_minS);
    static readonly char[] DFA13_max = DFA.UnpackEncodedStringToUnsignedChars(DFA13_maxS);
    static readonly short[] DFA13_accept = DFA.UnpackEncodedString(DFA13_acceptS);
    static readonly short[] DFA13_special = DFA.UnpackEncodedString(DFA13_specialS);
    static readonly short[][] DFA13_transition = DFA.UnpackEncodedStringArray(DFA13_transitionS);

    protected class DFA13 : DFA
    {
        public DFA13(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 13;
            this.eot = DFA13_eot;
            this.eof = DFA13_eof;
            this.min = DFA13_min;
            this.max = DFA13_max;
            this.accept = DFA13_accept;
            this.special = DFA13_special;
            this.transition = DFA13_transition;

        }

        override public string Description
        {
            get { return "453:5: ( groupByClause ( havingClause )? )?"; }
        }

    }

    const string DFA12_eotS =
        "\x0b\uffff";
    const string DFA12_eofS =
        "\x01\x02\x0a\uffff";
    const string DFA12_minS =
        "\x01\x3c\x0a\uffff";
    const string DFA12_maxS =
        "\x01\u0112\x0a\uffff";
    const string DFA12_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x08\uffff";
    const string DFA12_specialS =
        "\x0b\uffff}>";
    static readonly string[] DFA12_transitionS = {
            "\x01\x02\x21\uffff\x01\x02\x0b\uffff\x01\x02\x0b\uffff\x01"+
            "\x01\x09\uffff\x01\x02\x1d\uffff\x01\x02\x01\uffff\x01\x02\x3a"+
            "\uffff\x01\x02\x34\uffff\x01\x02\x01\uffff\x01\x02",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA12_eot = DFA.UnpackEncodedString(DFA12_eotS);
    static readonly short[] DFA12_eof = DFA.UnpackEncodedString(DFA12_eofS);
    static readonly char[] DFA12_min = DFA.UnpackEncodedStringToUnsignedChars(DFA12_minS);
    static readonly char[] DFA12_max = DFA.UnpackEncodedStringToUnsignedChars(DFA12_maxS);
    static readonly short[] DFA12_accept = DFA.UnpackEncodedString(DFA12_acceptS);
    static readonly short[] DFA12_special = DFA.UnpackEncodedString(DFA12_specialS);
    static readonly short[][] DFA12_transition = DFA.UnpackEncodedStringArray(DFA12_transitionS);

    protected class DFA12 : DFA
    {
        public DFA12(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 12;
            this.eot = DFA12_eot;
            this.eof = DFA12_eof;
            this.min = DFA12_min;
            this.max = DFA12_max;
            this.accept = DFA12_accept;
            this.special = DFA12_special;
            this.transition = DFA12_transition;

        }

        override public string Description
        {
            get { return "453:20: ( havingClause )?"; }
        }

    }

    const string DFA15_eotS =
        "\x1b\uffff";
    const string DFA15_eofS =
        "\x1b\uffff";
    const string DFA15_minS =
        "\x01\x21\x1a\uffff";
    const string DFA15_maxS =
        "\x01\u012a\x1a\uffff";
    const string DFA15_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x01\x03\x17\uffff";
    const string DFA15_specialS =
        "\x1b\uffff}>";
    static readonly string[] DFA15_transitionS = {
            "\x01\x01\x06\uffff\x01\x03\x01\uffff\x01\x03\x02\uffff\x01"+
            "\x03\x05\uffff\x02\x03\x08\uffff\x01\x03\x06\uffff\x01\x03\x03"+
            "\uffff\x02\x03\x0a\uffff\x01\x02\x04\uffff\x01\x03\x09\uffff"+
            "\x04\x03\x04\uffff\x01\x03\x09\uffff\x01\x03\x04\uffff\x01\x03"+
            "\x09\uffff\x02\x03\x02\uffff\x01\x03\x03\uffff\x03\x03\x02\uffff"+
            "\x01\x03\x02\uffff\x01\x03\x0e\uffff\x01\x03\x09\uffff\x01\x03"+
            "\x01\uffff\x02\x03\x01\uffff\x01\x03\x02\uffff\x02\x03\x05\uffff"+
            "\x02\x03\x01\uffff\x01\x03\x01\uffff\x02\x03\x04\uffff\x02\x03"+
            "\x05\uffff\x03\x03\x02\uffff\x01\x03\x01\uffff\x01\x03\x09\uffff"+
            "\x01\x03\x05\uffff\x01\x03\x06\uffff\x24\x03\x01\uffff\x01\x03"+
            "\x02\uffff\x03\x03\x03\uffff\x02\x03\x06\uffff\x09\x03",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA15_eot = DFA.UnpackEncodedString(DFA15_eotS);
    static readonly short[] DFA15_eof = DFA.UnpackEncodedString(DFA15_eofS);
    static readonly char[] DFA15_min = DFA.UnpackEncodedStringToUnsignedChars(DFA15_minS);
    static readonly char[] DFA15_max = DFA.UnpackEncodedStringToUnsignedChars(DFA15_maxS);
    static readonly short[] DFA15_accept = DFA.UnpackEncodedString(DFA15_acceptS);
    static readonly short[] DFA15_special = DFA.UnpackEncodedString(DFA15_specialS);
    static readonly short[][] DFA15_transition = DFA.UnpackEncodedStringArray(DFA15_transitionS);

    protected class DFA15 : DFA
    {
        public DFA15(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 15;
            this.eot = DFA15_eot;
            this.eof = DFA15_eof;
            this.min = DFA15_min;
            this.max = DFA15_max;
            this.accept = DFA15_accept;
            this.special = DFA15_special;
            this.transition = DFA15_transition;

        }

        override public string Description
        {
            get { return "473:14: (d= ALL | d= DISTINCT )?"; }
        }

    }

    const string DFA18_eotS =
        "\x19\uffff";
    const string DFA18_eofS =
        "\x19\uffff";
    const string DFA18_minS =
        "\x01\x28\x18\uffff";
    const string DFA18_maxS =
        "\x01\u012a\x18\uffff";
    const string DFA18_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x16\uffff";
    const string DFA18_specialS =
        "\x19\uffff}>";
    static readonly string[] DFA18_transitionS = {
            "\x01\x02\x01\uffff\x01\x02\x02\uffff\x01\x02\x05\uffff\x02"+
            "\x02\x08\uffff\x01\x02\x06\uffff\x01\x02\x03\uffff\x02\x02\x0f"+
            "\uffff\x01\x02\x09\uffff\x04\x02\x04\uffff\x01\x02\x09\uffff"+
            "\x01\x02\x04\uffff\x01\x02\x09\uffff\x02\x02\x02\uffff\x01\x02"+
            "\x03\uffff\x03\x02\x02\uffff\x01\x02\x02\uffff\x01\x02\x0e\uffff"+
            "\x01\x02\x09\uffff\x01\x02\x01\uffff\x02\x02\x01\uffff\x01\x02"+
            "\x02\uffff\x02\x02\x05\uffff\x02\x02\x01\uffff\x01\x02\x01\uffff"+
            "\x02\x02\x04\uffff\x02\x02\x05\uffff\x03\x02\x02\uffff\x01\x02"+
            "\x01\uffff\x01\x01\x09\uffff\x01\x02\x05\uffff\x01\x02\x06\uffff"+
            "\x24\x02\x01\uffff\x01\x02\x02\uffff\x03\x02\x03\uffff\x02\x02"+
            "\x06\uffff\x09\x02",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA18_eot = DFA.UnpackEncodedString(DFA18_eotS);
    static readonly short[] DFA18_eof = DFA.UnpackEncodedString(DFA18_eofS);
    static readonly char[] DFA18_min = DFA.UnpackEncodedStringToUnsignedChars(DFA18_minS);
    static readonly char[] DFA18_max = DFA.UnpackEncodedStringToUnsignedChars(DFA18_maxS);
    static readonly short[] DFA18_accept = DFA.UnpackEncodedString(DFA18_acceptS);
    static readonly short[] DFA18_special = DFA.UnpackEncodedString(DFA18_specialS);
    static readonly short[][] DFA18_transition = DFA.UnpackEncodedStringArray(DFA18_transitionS);

    protected class DFA18 : DFA
    {
        public DFA18(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 18;
            this.eot = DFA18_eot;
            this.eof = DFA18_eof;
            this.min = DFA18_min;
            this.max = DFA18_max;
            this.accept = DFA18_accept;
            this.special = DFA18_special;
            this.transition = DFA18_transition;

        }

        override public string Description
        {
            get { return "473:36: ( TOP k= expression ( PERCENT )? ( WITH TIES )? )?"; }
        }

    }

    const string DFA16_eotS =
        "\x1a\uffff";
    const string DFA16_eofS =
        "\x1a\uffff";
    const string DFA16_minS =
        "\x01\x28\x19\uffff";
    const string DFA16_maxS =
        "\x01\u012a\x19\uffff";
    const string DFA16_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x17\uffff";
    const string DFA16_specialS =
        "\x1a\uffff}>";
    static readonly string[] DFA16_transitionS = {
            "\x01\x02\x01\uffff\x01\x02\x02\uffff\x01\x02\x05\uffff\x02"+
            "\x02\x08\uffff\x01\x02\x06\uffff\x01\x02\x03\uffff\x02\x02\x0f"+
            "\uffff\x01\x02\x09\uffff\x04\x02\x04\uffff\x01\x02\x09\uffff"+
            "\x01\x02\x04\uffff\x01\x02\x09\uffff\x02\x02\x02\uffff\x01\x02"+
            "\x03\uffff\x03\x02\x02\uffff\x01\x02\x02\uffff\x01\x02\x0e\uffff"+
            "\x01\x02\x01\x01\x08\uffff\x01\x02\x01\uffff\x02\x02\x01\uffff"+
            "\x01\x02\x02\uffff\x02\x02\x05\uffff\x02\x02\x01\uffff\x01\x02"+
            "\x01\uffff\x02\x02\x04\uffff\x02\x02\x05\uffff\x03\x02\x02\uffff"+
            "\x01\x02\x0b\uffff\x01\x02\x05\uffff\x01\x02\x04\uffff\x01\x02"+
            "\x01\uffff\x24\x02\x01\uffff\x01\x02\x02\uffff\x03\x02\x03\uffff"+
            "\x02\x02\x06\uffff\x09\x02",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA16_eot = DFA.UnpackEncodedString(DFA16_eotS);
    static readonly short[] DFA16_eof = DFA.UnpackEncodedString(DFA16_eofS);
    static readonly char[] DFA16_min = DFA.UnpackEncodedStringToUnsignedChars(DFA16_minS);
    static readonly char[] DFA16_max = DFA.UnpackEncodedStringToUnsignedChars(DFA16_maxS);
    static readonly short[] DFA16_accept = DFA.UnpackEncodedString(DFA16_acceptS);
    static readonly short[] DFA16_special = DFA.UnpackEncodedString(DFA16_specialS);
    static readonly short[][] DFA16_transition = DFA.UnpackEncodedStringArray(DFA16_transitionS);

    protected class DFA16 : DFA
    {
        public DFA16(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 16;
            this.eot = DFA16_eot;
            this.eof = DFA16_eof;
            this.min = DFA16_min;
            this.max = DFA16_max;
            this.accept = DFA16_accept;
            this.special = DFA16_special;
            this.transition = DFA16_transition;

        }

        override public string Description
        {
            get { return "473:54: ( PERCENT )?"; }
        }

    }

    const string DFA17_eotS =
        "\x19\uffff";
    const string DFA17_eofS =
        "\x19\uffff";
    const string DFA17_minS =
        "\x01\x28\x18\uffff";
    const string DFA17_maxS =
        "\x01\u012a\x18\uffff";
    const string DFA17_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x16\uffff";
    const string DFA17_specialS =
        "\x19\uffff}>";
    static readonly string[] DFA17_transitionS = {
            "\x01\x02\x01\uffff\x01\x02\x02\uffff\x01\x02\x05\uffff\x02"+
            "\x02\x08\uffff\x01\x02\x06\uffff\x01\x02\x03\uffff\x02\x02\x0f"+
            "\uffff\x01\x02\x09\uffff\x04\x02\x04\uffff\x01\x02\x09\uffff"+
            "\x01\x02\x04\uffff\x01\x02\x09\uffff\x02\x02\x02\uffff\x01\x02"+
            "\x03\uffff\x03\x02\x02\uffff\x01\x02\x02\uffff\x01\x02\x0e\uffff"+
            "\x01\x02\x09\uffff\x01\x02\x01\uffff\x02\x02\x01\uffff\x01\x02"+
            "\x02\uffff\x02\x02\x05\uffff\x02\x02\x01\uffff\x01\x02\x01\uffff"+
            "\x02\x02\x04\uffff\x02\x02\x05\uffff\x03\x02\x02\uffff\x01\x02"+
            "\x0b\uffff\x01\x02\x05\uffff\x01\x02\x04\uffff\x01\x01\x01\uffff"+
            "\x24\x02\x01\uffff\x01\x02\x02\uffff\x03\x02\x03\uffff\x02\x02"+
            "\x06\uffff\x09\x02",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA17_eot = DFA.UnpackEncodedString(DFA17_eotS);
    static readonly short[] DFA17_eof = DFA.UnpackEncodedString(DFA17_eofS);
    static readonly char[] DFA17_min = DFA.UnpackEncodedStringToUnsignedChars(DFA17_minS);
    static readonly char[] DFA17_max = DFA.UnpackEncodedStringToUnsignedChars(DFA17_maxS);
    static readonly short[] DFA17_accept = DFA.UnpackEncodedString(DFA17_acceptS);
    static readonly short[] DFA17_special = DFA.UnpackEncodedString(DFA17_specialS);
    static readonly short[][] DFA17_transition = DFA.UnpackEncodedStringArray(DFA17_transitionS);

    protected class DFA17 : DFA
    {
        public DFA17(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 17;
            this.eot = DFA17_eot;
            this.eof = DFA17_eof;
            this.min = DFA17_min;
            this.max = DFA17_max;
            this.accept = DFA17_accept;
            this.special = DFA17_special;
            this.transition = DFA17_transition;

        }

        override public string Description
        {
            get { return "473:65: ( WITH TIES )?"; }
        }

    }

    const string DFA19_eotS =
        "\x0d\uffff";
    const string DFA19_eofS =
        "\x01\x01\x0c\uffff";
    const string DFA19_minS =
        "\x01\x3c\x0c\uffff";
    const string DFA19_maxS =
        "\x01\u0113\x0c\uffff";
    const string DFA19_acceptS =
        "\x01\uffff\x01\x02\x0a\uffff\x01\x01";
    const string DFA19_specialS =
        "\x0d\uffff}>";
    static readonly string[] DFA19_transitionS = {
            "\x01\x01\x21\uffff\x01\x01\x0b\uffff\x01\x01\x04\uffff\x01"+
            "\x01\x10\uffff\x02\x01\x1c\uffff\x01\x01\x01\uffff\x01\x01\x3a"+
            "\uffff\x01\x01\x34\uffff\x01\x01\x01\uffff\x01\x01\x01\x0c",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA19_eot = DFA.UnpackEncodedString(DFA19_eotS);
    static readonly short[] DFA19_eof = DFA.UnpackEncodedString(DFA19_eofS);
    static readonly char[] DFA19_min = DFA.UnpackEncodedStringToUnsignedChars(DFA19_minS);
    static readonly char[] DFA19_max = DFA.UnpackEncodedStringToUnsignedChars(DFA19_maxS);
    static readonly short[] DFA19_accept = DFA.UnpackEncodedString(DFA19_acceptS);
    static readonly short[] DFA19_special = DFA.UnpackEncodedString(DFA19_specialS);
    static readonly short[][] DFA19_transition = DFA.UnpackEncodedStringArray(DFA19_transitionS);

    protected class DFA19 : DFA
    {
        public DFA19(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 19;
            this.eot = DFA19_eot;
            this.eof = DFA19_eof;
            this.min = DFA19_min;
            this.max = DFA19_max;
            this.accept = DFA19_accept;
            this.special = DFA19_special;
            this.transition = DFA19_transition;

        }

        override public string Description
        {
            get { return "()* loopback of 473:92: ( COMMA selectItem )*"; }
        }

    }

    const string DFA20_eotS =
        "\x0c\uffff";
    const string DFA20_eofS =
        "\x01\x02\x0b\uffff";
    const string DFA20_minS =
        "\x01\x3c\x0b\uffff";
    const string DFA20_maxS =
        "\x01\u0112\x0b\uffff";
    const string DFA20_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x09\uffff";
    const string DFA20_specialS =
        "\x0c\uffff}>";
    static readonly string[] DFA20_transitionS = {
            "\x01\x02\x21\uffff\x01\x02\x0b\uffff\x01\x02\x04\uffff\x01"+
            "\x02\x10\uffff\x01\x02\x01\x01\x1c\uffff\x01\x02\x01\uffff\x01"+
            "\x02\x3a\uffff\x01\x02\x34\uffff\x01\x02\x01\uffff\x01\x02",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA20_eot = DFA.UnpackEncodedString(DFA20_eotS);
    static readonly short[] DFA20_eof = DFA.UnpackEncodedString(DFA20_eofS);
    static readonly char[] DFA20_min = DFA.UnpackEncodedStringToUnsignedChars(DFA20_minS);
    static readonly char[] DFA20_max = DFA.UnpackEncodedStringToUnsignedChars(DFA20_maxS);
    static readonly short[] DFA20_accept = DFA.UnpackEncodedString(DFA20_acceptS);
    static readonly short[] DFA20_special = DFA.UnpackEncodedString(DFA20_specialS);
    static readonly short[][] DFA20_transition = DFA.UnpackEncodedStringArray(DFA20_transitionS);

    protected class DFA20 : DFA
    {
        public DFA20(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 20;
            this.eot = DFA20_eot;
            this.eof = DFA20_eof;
            this.min = DFA20_min;
            this.max = DFA20_max;
            this.accept = DFA20_accept;
            this.special = DFA20_special;
            this.transition = DFA20_transition;

        }

        override public string Description
        {
            get { return "473:112: ( INTO dbObject )?"; }
        }

    }

    const string DFA21_eotS =
        "\x0a\uffff";
    const string DFA21_eofS =
        "\x01\x03\x09\uffff";
    const string DFA21_minS =
        "\x01\x26\x09\uffff";
    const string DFA21_maxS =
        "\x01\u0113\x09\uffff";
    const string DFA21_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x01\x03\x06\uffff";
    const string DFA21_specialS =
        "\x0a\uffff}>";
    static readonly string[] DFA21_transitionS = {
            "\x01\x01\x15\uffff\x01\x03\x15\uffff\x01\x02\x17\uffff\x01"+
            "\x03\x33\uffff\x01\x03\x71\uffff\x01\x03\x01\uffff\x02\x03",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA21_eot = DFA.UnpackEncodedString(DFA21_eotS);
    static readonly short[] DFA21_eof = DFA.UnpackEncodedString(DFA21_eofS);
    static readonly char[] DFA21_min = DFA.UnpackEncodedStringToUnsignedChars(DFA21_minS);
    static readonly char[] DFA21_max = DFA.UnpackEncodedStringToUnsignedChars(DFA21_maxS);
    static readonly short[] DFA21_accept = DFA.UnpackEncodedString(DFA21_acceptS);
    static readonly short[] DFA21_special = DFA.UnpackEncodedString(DFA21_specialS);
    static readonly short[][] DFA21_transition = DFA.UnpackEncodedStringArray(DFA21_transitionS);

    protected class DFA21 : DFA
    {
        public DFA21(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 21;
            this.eot = DFA21_eot;
            this.eof = DFA21_eof;
            this.min = DFA21_min;
            this.max = DFA21_max;
            this.accept = DFA21_accept;
            this.special = DFA21_special;
            this.transition = DFA21_transition;

        }

        override public string Description
        {
            get { return "483:18: (o= ASC | o= DESC )?"; }
        }

    }

    const string DFA23_eotS =
        "\x18\uffff";
    const string DFA23_eofS =
        "\x18\uffff";
    const string DFA23_minS =
        "\x01\x21\x17\uffff";
    const string DFA23_maxS =
        "\x01\u012a\x17\uffff";
    const string DFA23_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x15\uffff";
    const string DFA23_specialS =
        "\x18\uffff}>";
    static readonly string[] DFA23_transitionS = {
            "\x01\x01\x06\uffff\x01\x02\x01\uffff\x01\x02\x02\uffff\x01"+
            "\x02\x05\uffff\x02\x02\x08\uffff\x01\x02\x06\uffff\x01\x02\x03"+
            "\uffff\x02\x02\x0f\uffff\x01\x02\x09\uffff\x04\x02\x04\uffff"+
            "\x01\x02\x09\uffff\x01\x02\x04\uffff\x01\x02\x09\uffff\x02\x02"+
            "\x02\uffff\x01\x02\x03\uffff\x03\x02\x02\uffff\x01\x02\x02\uffff"+
            "\x01\x02\x0e\uffff\x01\x02\x09\uffff\x01\x02\x01\uffff\x02\x02"+
            "\x01\uffff\x01\x02\x02\uffff\x02\x02\x05\uffff\x02\x02\x01\uffff"+
            "\x01\x02\x01\uffff\x02\x02\x04\uffff\x02\x02\x05\uffff\x03\x02"+
            "\x02\uffff\x01\x02\x0b\uffff\x01\x02\x05\uffff\x01\x02\x06\uffff"+
            "\x24\x02\x01\uffff\x01\x02\x02\uffff\x01\x02\x01\uffff\x01\x02"+
            "\x03\uffff\x02\x02\x06\uffff\x09\x02",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA23_eot = DFA.UnpackEncodedString(DFA23_eotS);
    static readonly short[] DFA23_eof = DFA.UnpackEncodedString(DFA23_eofS);
    static readonly char[] DFA23_min = DFA.UnpackEncodedStringToUnsignedChars(DFA23_minS);
    static readonly char[] DFA23_max = DFA.UnpackEncodedStringToUnsignedChars(DFA23_maxS);
    static readonly short[] DFA23_accept = DFA.UnpackEncodedString(DFA23_acceptS);
    static readonly short[] DFA23_special = DFA.UnpackEncodedString(DFA23_specialS);
    static readonly short[][] DFA23_transition = DFA.UnpackEncodedStringArray(DFA23_transitionS);

    protected class DFA23 : DFA
    {
        public DFA23(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 23;
            this.eot = DFA23_eot;
            this.eof = DFA23_eof;
            this.min = DFA23_min;
            this.max = DFA23_max;
            this.accept = DFA23_accept;
            this.special = DFA23_special;
            this.transition = DFA23_transition;

        }

        override public string Description
        {
            get { return "493:16: ( ALL )?"; }
        }

    }

    const string DFA24_eotS =
        "\x0d\uffff";
    const string DFA24_eofS =
        "\x01\x01\x0c\uffff";
    const string DFA24_minS =
        "\x01\x3c\x0c\uffff";
    const string DFA24_maxS =
        "\x01\u0113\x0c\uffff";
    const string DFA24_acceptS =
        "\x01\uffff\x01\x02\x0a\uffff\x01\x01";
    const string DFA24_specialS =
        "\x0d\uffff}>";
    static readonly string[] DFA24_transitionS = {
            "\x01\x01\x21\uffff\x01\x01\x0b\uffff\x01\x01\x0b\uffff\x01"+
            "\x01\x09\uffff\x01\x01\x1d\uffff\x01\x01\x01\uffff\x01\x01\x3a"+
            "\uffff\x01\x01\x0e\uffff\x01\x01\x25\uffff\x01\x01\x01\uffff"+
            "\x01\x01\x01\x0c",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA24_eot = DFA.UnpackEncodedString(DFA24_eotS);
    static readonly short[] DFA24_eof = DFA.UnpackEncodedString(DFA24_eofS);
    static readonly char[] DFA24_min = DFA.UnpackEncodedStringToUnsignedChars(DFA24_minS);
    static readonly char[] DFA24_max = DFA.UnpackEncodedStringToUnsignedChars(DFA24_maxS);
    static readonly short[] DFA24_accept = DFA.UnpackEncodedString(DFA24_acceptS);
    static readonly short[] DFA24_special = DFA.UnpackEncodedString(DFA24_specialS);
    static readonly short[][] DFA24_transition = DFA.UnpackEncodedStringArray(DFA24_transitionS);

    protected class DFA24 : DFA
    {
        public DFA24(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 24;
            this.eot = DFA24_eot;
            this.eof = DFA24_eof;
            this.min = DFA24_min;
            this.max = DFA24_max;
            this.accept = DFA24_accept;
            this.special = DFA24_special;
            this.transition = DFA24_transition;

        }

        override public string Description
        {
            get { return "()* loopback of 493:34: ( COMMA expression )*"; }
        }

    }

    const string DFA26_eotS =
        "\x0c\uffff";
    const string DFA26_eofS =
        "\x01\x02\x0b\uffff";
    const string DFA26_minS =
        "\x01\x3c\x0b\uffff";
    const string DFA26_maxS =
        "\x01\u0112\x0b\uffff";
    const string DFA26_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x09\uffff";
    const string DFA26_specialS =
        "\x0c\uffff}>";
    static readonly string[] DFA26_transitionS = {
            "\x01\x02\x21\uffff\x01\x02\x0b\uffff\x01\x02\x0b\uffff\x01"+
            "\x02\x09\uffff\x01\x02\x1d\uffff\x01\x02\x01\uffff\x01\x02\x3a"+
            "\uffff\x01\x02\x0e\uffff\x01\x01\x25\uffff\x01\x02\x01\uffff"+
            "\x01\x02",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA26_eot = DFA.UnpackEncodedString(DFA26_eotS);
    static readonly short[] DFA26_eof = DFA.UnpackEncodedString(DFA26_eofS);
    static readonly char[] DFA26_min = DFA.UnpackEncodedStringToUnsignedChars(DFA26_minS);
    static readonly char[] DFA26_max = DFA.UnpackEncodedStringToUnsignedChars(DFA26_maxS);
    static readonly short[] DFA26_accept = DFA.UnpackEncodedString(DFA26_acceptS);
    static readonly short[] DFA26_special = DFA.UnpackEncodedString(DFA26_specialS);
    static readonly short[][] DFA26_transition = DFA.UnpackEncodedStringArray(DFA26_transitionS);

    protected class DFA26 : DFA
    {
        public DFA26(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 26;
            this.eot = DFA26_eot;
            this.eof = DFA26_eof;
            this.min = DFA26_min;
            this.max = DFA26_max;
            this.accept = DFA26_accept;
            this.special = DFA26_special;
            this.transition = DFA26_transition;

        }

        override public string Description
        {
            get { return "493:54: ( WITH ( CUBE | ROLLUP ) )?"; }
        }

    }

    const string DFA28_eotS =
        "\x12\uffff";
    const string DFA28_eofS =
        "\x12\uffff";
    const string DFA28_minS =
        "\x01\x3d\x01\x74\x01\uffff\x01\u0083\x0e\uffff";
    const string DFA28_maxS =
        "\x01\u00bd\x01\u00db\x01\uffff\x01\u00db\x0e\uffff";
    const string DFA28_acceptS =
        "\x02\uffff\x01\x01\x01\uffff\x01\x02\x01\x03\x01\x04\x01\x05\x01"+
        "\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x05\uffff";
    const string DFA28_specialS =
        "\x12\uffff}>";
    static readonly string[] DFA28_transitionS = {
            "\x01\x04\x25\uffff\x01\x0c\x01\uffff\x01\x06\x05\uffff\x01"+
            "\x07\x09\uffff\x01\x01\x0e\uffff\x01\x0a\x01\x0b\x06\uffff\x01"+
            "\x05\x01\x08\x01\x03\x11\uffff\x01\x02\x1c\uffff\x01\x09",
            "\x01\x02\x0e\uffff\x01\x05\x57\uffff\x01\x04",
            "",
            "\x01\x05\x57\uffff\x01\x04",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA28_eot = DFA.UnpackEncodedString(DFA28_eotS);
    static readonly short[] DFA28_eof = DFA.UnpackEncodedString(DFA28_eofS);
    static readonly char[] DFA28_min = DFA.UnpackEncodedStringToUnsignedChars(DFA28_minS);
    static readonly char[] DFA28_max = DFA.UnpackEncodedStringToUnsignedChars(DFA28_maxS);
    static readonly short[] DFA28_accept = DFA.UnpackEncodedString(DFA28_acceptS);
    static readonly short[] DFA28_special = DFA.UnpackEncodedString(DFA28_specialS);
    static readonly short[][] DFA28_transition = DFA.UnpackEncodedStringArray(DFA28_transitionS);

    protected class DFA28 : DFA
    {
        public DFA28(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 28;
            this.eot = DFA28_eot;
            this.eof = DFA28_eof;
            this.min = DFA28_min;
            this.max = DFA28_max;
            this.accept = DFA28_accept;
            this.special = DFA28_special;
            this.transition = DFA28_transition;

        }

        override public string Description
        {
            get { return "507:1: queryHint : ( ( HASH | ORDER ) GROUP | ( CONCAT | HASH | MERGE ) UNION | ( LOOP | MERGE | HASH ) JOIN | FAST Integer | FORCE ORDER | MAXDOP Integer | ROBUST PLAN | KEEP PLAN | KEEPFIXED PLAN | EXPAND VIEWS );"; }
        }

    }

    const string DFA35_eotS =
        "\x17\uffff";
    const string DFA35_eofS =
        "\x01\x01\x16\uffff";
    const string DFA35_minS =
        "\x01\x3c\x16\uffff";
    const string DFA35_maxS =
        "\x01\u0113\x16\uffff";
    const string DFA35_acceptS =
        "\x01\uffff\x01\x02\x14\uffff\x01\x01";
    const string DFA35_specialS =
        "\x17\uffff}>";
    static readonly string[] DFA35_transitionS = {
            "\x01\x01\x06\uffff\x01\x01\x1a\uffff\x01\x01\x0b\uffff\x01"+
            "\x01\x05\uffff\x01\x01\x03\uffff\x02\x01\x08\uffff\x01\x01\x01"+
            "\uffff\x01\x01\x02\uffff\x01\x01\x04\uffff\x01\x01\x03\uffff"+
            "\x01\x01\x01\uffff\x01\x01\x09\uffff\x01\x01\x05\uffff\x01\x01"+
            "\x01\x16\x01\x01\x14\uffff\x01\x01\x06\uffff\x01\x01\x15\uffff"+
            "\x01\x01\x08\uffff\x01\x01\x0c\uffff\x01\x01\x27\uffff\x01\x01"+
            "\x01\uffff\x02\x01",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA35_eot = DFA.UnpackEncodedString(DFA35_eotS);
    static readonly short[] DFA35_eof = DFA.UnpackEncodedString(DFA35_eofS);
    static readonly char[] DFA35_min = DFA.UnpackEncodedStringToUnsignedChars(DFA35_minS);
    static readonly char[] DFA35_max = DFA.UnpackEncodedStringToUnsignedChars(DFA35_maxS);
    static readonly short[] DFA35_accept = DFA.UnpackEncodedString(DFA35_acceptS);
    static readonly short[] DFA35_special = DFA.UnpackEncodedString(DFA35_specialS);
    static readonly short[][] DFA35_transition = DFA.UnpackEncodedStringArray(DFA35_transitionS);

    protected class DFA35 : DFA
    {
        public DFA35(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 35;
            this.eot = DFA35_eot;
            this.eof = DFA35_eof;
            this.min = DFA35_min;
            this.max = DFA35_max;
            this.accept = DFA35_accept;
            this.special = DFA35_special;
            this.transition = DFA35_transition;

        }

        override public string Description
        {
            get { return "()* loopback of 539:22: ( OR andSearchCondition )*"; }
        }

    }

    const string DFA36_eotS =
        "\x18\uffff";
    const string DFA36_eofS =
        "\x01\x01\x17\uffff";
    const string DFA36_minS =
        "\x01\x23\x17\uffff";
    const string DFA36_maxS =
        "\x01\u0113\x17\uffff";
    const string DFA36_acceptS =
        "\x01\uffff\x01\x02\x15\uffff\x01\x01";
    const string DFA36_specialS =
        "\x18\uffff}>";
    static readonly string[] DFA36_transitionS = {
            "\x01\x17\x18\uffff\x01\x01\x06\uffff\x01\x01\x1a\uffff\x01"+
            "\x01\x0b\uffff\x01\x01\x05\uffff\x01\x01\x03\uffff\x02\x01\x08"+
            "\uffff\x01\x01\x01\uffff\x01\x01\x02\uffff\x01\x01\x04\uffff"+
            "\x01\x01\x03\uffff\x01\x01\x01\uffff\x01\x01\x09\uffff\x01\x01"+
            "\x05\uffff\x03\x01\x14\uffff\x01\x01\x06\uffff\x01\x01\x15\uffff"+
            "\x01\x01\x08\uffff\x01\x01\x0c\uffff\x01\x01\x27\uffff\x01\x01"+
            "\x01\uffff\x02\x01",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA36_eot = DFA.UnpackEncodedString(DFA36_eotS);
    static readonly short[] DFA36_eof = DFA.UnpackEncodedString(DFA36_eofS);
    static readonly char[] DFA36_min = DFA.UnpackEncodedStringToUnsignedChars(DFA36_minS);
    static readonly char[] DFA36_max = DFA.UnpackEncodedStringToUnsignedChars(DFA36_maxS);
    static readonly short[] DFA36_accept = DFA.UnpackEncodedString(DFA36_acceptS);
    static readonly short[] DFA36_special = DFA.UnpackEncodedString(DFA36_specialS);
    static readonly short[][] DFA36_transition = DFA.UnpackEncodedStringArray(DFA36_transitionS);

    protected class DFA36 : DFA
    {
        public DFA36(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 36;
            this.eot = DFA36_eot;
            this.eof = DFA36_eof;
            this.min = DFA36_min;
            this.max = DFA36_max;
            this.accept = DFA36_accept;
            this.special = DFA36_special;
            this.transition = DFA36_transition;

        }

        override public string Description
        {
            get { return "()* loopback of 543:29: ( AND negsubSearchCondition )*"; }
        }

    }

    const string DFA37_eotS =
        "\x19\uffff";
    const string DFA37_eofS =
        "\x19\uffff";
    const string DFA37_minS =
        "\x01\x28\x18\uffff";
    const string DFA37_maxS =
        "\x01\u012a\x18\uffff";
    const string DFA37_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x16\uffff";
    const string DFA37_specialS =
        "\x19\uffff}>";
    static readonly string[] DFA37_transitionS = {
            "\x01\x02\x01\uffff\x01\x02\x02\uffff\x01\x02\x05\uffff\x02"+
            "\x02\x08\uffff\x01\x02\x06\uffff\x01\x02\x03\uffff\x02\x02\x0f"+
            "\uffff\x01\x02\x07\uffff\x01\x02\x01\uffff\x04\x02\x04\uffff"+
            "\x01\x02\x09\uffff\x01\x02\x04\uffff\x01\x02\x09\uffff\x02\x02"+
            "\x02\uffff\x01\x02\x03\uffff\x03\x02\x02\uffff\x01\x02\x01\uffff"+
            "\x01\x01\x01\x02\x0e\uffff\x01\x02\x09\uffff\x01\x02\x01\uffff"+
            "\x02\x02\x01\uffff\x01\x02\x02\uffff\x02\x02\x05\uffff\x02\x02"+
            "\x01\uffff\x01\x02\x01\uffff\x02\x02\x04\uffff\x02\x02\x05\uffff"+
            "\x03\x02\x02\uffff\x01\x02\x0b\uffff\x01\x02\x05\uffff\x01\x02"+
            "\x06\uffff\x24\x02\x01\uffff\x01\x02\x02\uffff\x01\x02\x01\uffff"+
            "\x01\x02\x03\uffff\x02\x02\x06\uffff\x09\x02",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA37_eot = DFA.UnpackEncodedString(DFA37_eotS);
    static readonly short[] DFA37_eof = DFA.UnpackEncodedString(DFA37_eofS);
    static readonly char[] DFA37_min = DFA.UnpackEncodedStringToUnsignedChars(DFA37_minS);
    static readonly char[] DFA37_max = DFA.UnpackEncodedStringToUnsignedChars(DFA37_maxS);
    static readonly short[] DFA37_accept = DFA.UnpackEncodedString(DFA37_acceptS);
    static readonly short[] DFA37_special = DFA.UnpackEncodedString(DFA37_specialS);
    static readonly short[][] DFA37_transition = DFA.UnpackEncodedStringArray(DFA37_transitionS);

    protected class DFA37 : DFA
    {
        public DFA37(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 37;
            this.eot = DFA37_eot;
            this.eof = DFA37_eof;
            this.min = DFA37_min;
            this.max = DFA37_max;
            this.accept = DFA37_accept;
            this.special = DFA37_special;
            this.transition = DFA37_transition;

        }

        override public string Description
        {
            get { return "546:1: negsubSearchCondition : ( NOT subSearchCondition -> ^( NOT subSearchCondition ) | subSearchCondition );"; }
        }

    }

    const string DFA38_eotS =
        "\x31\uffff";
    const string DFA38_eofS =
        "\x31\uffff";
    const string DFA38_minS =
        "\x02\x28\x17\uffff\x16\x00\x02\uffff";
    const string DFA38_maxS =
        "\x02\u012a\x17\uffff\x16\x00\x02\uffff";
    const string DFA38_acceptS =
        "\x02\uffff\x01\x02\x2c\uffff\x01\x01\x01\uffff";
    const string DFA38_specialS =
        "\x19\uffff\x01\x00\x01\x01\x01\x02\x01\x03\x01\x04\x01\x05\x01"+
        "\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x0d\x01"+
        "\x0e\x01\x0f\x01\x10\x01\x11\x01\x12\x01\x13\x01\x14\x01\x15\x02"+
        "\uffff}>";
    static readonly string[] DFA38_transitionS = {
            "\x01\x02\x01\uffff\x01\x02\x02\uffff\x01\x02\x05\uffff\x02"+
            "\x02\x08\uffff\x01\x02\x06\uffff\x01\x02\x03\uffff\x02\x02\x0f"+
            "\uffff\x01\x02\x07\uffff\x01\x02\x01\uffff\x04\x02\x04\uffff"+
            "\x01\x02\x09\uffff\x01\x02\x04\uffff\x01\x02\x09\uffff\x02\x02"+
            "\x02\uffff\x01\x02\x03\uffff\x03\x02\x02\uffff\x01\x02\x02\uffff"+
            "\x01\x02\x0e\uffff\x01\x02\x09\uffff\x01\x02\x01\uffff\x02\x02"+
            "\x01\uffff\x01\x02\x02\uffff\x02\x02\x05\uffff\x02\x02\x01\uffff"+
            "\x01\x02\x01\uffff\x02\x02\x04\uffff\x02\x02\x05\uffff\x03\x02"+
            "\x02\uffff\x01\x02\x0b\uffff\x01\x02\x05\uffff\x01\x02\x06\uffff"+
            "\x24\x02\x01\uffff\x01\x01\x02\uffff\x01\x02\x01\uffff\x01\x02"+
            "\x03\uffff\x02\x02\x06\uffff\x09\x02",
            "\x01\x2e\x01\uffff\x01\x2e\x02\uffff\x01\x2e\x05\uffff\x01"+
            "\x1d\x01\x1e\x08\uffff\x01\x2e\x06\uffff\x01\x2e\x03\uffff\x02"+
            "\x1f\x0f\uffff\x01\x2e\x07\uffff\x01\x2f\x01\uffff\x04\x2e\x04"+
            "\uffff\x01\x2e\x09\uffff\x01\x2e\x04\uffff\x01\x2c\x09\uffff"+
            "\x02\x2e\x02\uffff\x01\x29\x03\uffff\x03\x2e\x02\uffff\x01\x2e"+
            "\x01\uffff\x01\x2f\x01\x22\x0e\uffff\x01\x2e\x09\uffff\x01\x2e"+
            "\x01\uffff\x02\x2e\x01\uffff\x01\x2e\x02\uffff\x02\x2e\x05\uffff"+
            "\x01\x2a\x01\x2e\x01\uffff\x01\x2e\x01\uffff\x01\x2d\x01\x2e"+
            "\x03\uffff\x01\x02\x01\x2e\x01\x1f\x05\uffff\x01\x1f\x02\x2e"+
            "\x02\uffff\x01\x2e\x0b\uffff\x01\x2e\x05\uffff\x01\x2e\x06\uffff"+
            "\x03\x2e\x21\x27\x01\uffff\x01\x19\x02\uffff\x01\x20\x01\uffff"+
            "\x01\x28\x03\uffff\x01\x1a\x01\x1b\x06\uffff\x02\x23\x02\x2b"+
            "\x01\x21\x01\x24\x01\x25\x01\x26\x01\x1c",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "",
            ""
    };

    static readonly short[] DFA38_eot = DFA.UnpackEncodedString(DFA38_eotS);
    static readonly short[] DFA38_eof = DFA.UnpackEncodedString(DFA38_eofS);
    static readonly char[] DFA38_min = DFA.UnpackEncodedStringToUnsignedChars(DFA38_minS);
    static readonly char[] DFA38_max = DFA.UnpackEncodedStringToUnsignedChars(DFA38_maxS);
    static readonly short[] DFA38_accept = DFA.UnpackEncodedString(DFA38_acceptS);
    static readonly short[] DFA38_special = DFA.UnpackEncodedString(DFA38_specialS);
    static readonly short[][] DFA38_transition = DFA.UnpackEncodedStringArray(DFA38_transitionS);

    protected class DFA38 : DFA
    {
        public DFA38(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 38;
            this.eot = DFA38_eot;
            this.eof = DFA38_eof;
            this.min = DFA38_min;
            this.max = DFA38_max;
            this.accept = DFA38_accept;
            this.special = DFA38_special;
            this.transition = DFA38_transition;

        }

        override public string Description
        {
            get { return "552:1: subSearchCondition : ( LPAREN ( ( searchCondition )=> searchCondition ) RPAREN | predicate );"; }
        }

    }


    protected internal int DFA38_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA38_25 = input.LA(1);

                   	 
                   	int index38_25 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_25);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 1 : 
                   	int LA38_26 = input.LA(1);

                   	 
                   	int index38_26 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_26);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 2 : 
                   	int LA38_27 = input.LA(1);

                   	 
                   	int index38_27 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_27);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 3 : 
                   	int LA38_28 = input.LA(1);

                   	 
                   	int index38_28 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_28);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 4 : 
                   	int LA38_29 = input.LA(1);

                   	 
                   	int index38_29 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_29);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 5 : 
                   	int LA38_30 = input.LA(1);

                   	 
                   	int index38_30 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_30);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 6 : 
                   	int LA38_31 = input.LA(1);

                   	 
                   	int index38_31 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_31);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 7 : 
                   	int LA38_32 = input.LA(1);

                   	 
                   	int index38_32 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_32);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 8 : 
                   	int LA38_33 = input.LA(1);

                   	 
                   	int index38_33 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_33);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 9 : 
                   	int LA38_34 = input.LA(1);

                   	 
                   	int index38_34 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_34);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 10 : 
                   	int LA38_35 = input.LA(1);

                   	 
                   	int index38_35 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_35);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 11 : 
                   	int LA38_36 = input.LA(1);

                   	 
                   	int index38_36 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_36);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 12 : 
                   	int LA38_37 = input.LA(1);

                   	 
                   	int index38_37 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_37);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 13 : 
                   	int LA38_38 = input.LA(1);

                   	 
                   	int index38_38 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_38);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 14 : 
                   	int LA38_39 = input.LA(1);

                   	 
                   	int index38_39 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_39);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 15 : 
                   	int LA38_40 = input.LA(1);

                   	 
                   	int index38_40 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_40);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 16 : 
                   	int LA38_41 = input.LA(1);

                   	 
                   	int index38_41 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_41);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 17 : 
                   	int LA38_42 = input.LA(1);

                   	 
                   	int index38_42 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_42);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 18 : 
                   	int LA38_43 = input.LA(1);

                   	 
                   	int index38_43 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_43);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 19 : 
                   	int LA38_44 = input.LA(1);

                   	 
                   	int index38_44 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_44);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 20 : 
                   	int LA38_45 = input.LA(1);

                   	 
                   	int index38_45 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_45);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 21 : 
                   	int LA38_46 = input.LA(1);

                   	 
                   	int index38_46 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred57_Sql()) ) { s = 47; }

                   	else if ( (true) ) { s = 2; }

                   	 
                   	input.Seek(index38_46);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae38 =
            new NoViableAltException(dfa.Description, 38, _s, input);
        dfa.Error(nvae38);
        throw nvae38;
    }
    const string DFA52_eotS =
        "\x18\uffff";
    const string DFA52_eofS =
        "\x18\uffff";
    const string DFA52_minS =
        "\x01\x28\x17\uffff";
    const string DFA52_maxS =
        "\x01\u012a\x17\uffff";
    const string DFA52_acceptS =
        "\x01\uffff\x01\x01\x15\uffff\x01\x02";
    const string DFA52_specialS =
        "\x18\uffff}>";
    static readonly string[] DFA52_transitionS = {
            "\x01\x01\x01\uffff\x01\x01\x02\uffff\x01\x01\x05\uffff\x02"+
            "\x01\x08\uffff\x01\x01\x06\uffff\x01\x01\x03\uffff\x02\x01\x0f"+
            "\uffff\x01\x01\x07\uffff\x01\x17\x01\uffff\x04\x01\x04\uffff"+
            "\x01\x01\x09\uffff\x01\x01\x04\uffff\x01\x01\x09\uffff\x02\x01"+
            "\x02\uffff\x01\x01\x03\uffff\x03\x01\x02\uffff\x01\x01\x02\uffff"+
            "\x01\x01\x0e\uffff\x01\x01\x09\uffff\x01\x01\x01\uffff\x02\x01"+
            "\x01\uffff\x01\x01\x02\uffff\x02\x01\x05\uffff\x02\x01\x01\uffff"+
            "\x01\x01\x01\uffff\x02\x01\x04\uffff\x02\x01\x05\uffff\x03\x01"+
            "\x02\uffff\x01\x01\x0b\uffff\x01\x01\x05\uffff\x01\x01\x06\uffff"+
            "\x24\x01\x01\uffff\x01\x01\x02\uffff\x01\x01\x01\uffff\x01\x01"+
            "\x03\uffff\x02\x01\x06\uffff\x09\x01",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA52_eot = DFA.UnpackEncodedString(DFA52_eotS);
    static readonly short[] DFA52_eof = DFA.UnpackEncodedString(DFA52_eofS);
    static readonly char[] DFA52_min = DFA.UnpackEncodedStringToUnsignedChars(DFA52_minS);
    static readonly char[] DFA52_max = DFA.UnpackEncodedStringToUnsignedChars(DFA52_maxS);
    static readonly short[] DFA52_accept = DFA.UnpackEncodedString(DFA52_acceptS);
    static readonly short[] DFA52_special = DFA.UnpackEncodedString(DFA52_specialS);
    static readonly short[][] DFA52_transition = DFA.UnpackEncodedStringArray(DFA52_transitionS);

    protected class DFA52 : DFA
    {
        public DFA52(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 52;
            this.eot = DFA52_eot;
            this.eof = DFA52_eof;
            this.min = DFA52_min;
            this.max = DFA52_max;
            this.accept = DFA52_accept;
            this.special = DFA52_special;
            this.transition = DFA52_transition;

        }

        override public string Description
        {
            get { return "565:5: (lhs= expression (op= comparisonOperator (rhs= expression | (mod= ALL | mod= SOME | mod= ANY ) LPAREN ss= selectStatement RPAREN ) -> { $ss.text == null }? ^( $op $lhs $rhs) -> ^( $op $lhs ^( $mod $ss) ) | IS (c= NOT )? NULL -> {$c.text == null }? ^( IS $lhs NULL ) -> ^( NOT ^( IS $lhs NULL ) ) | (b= NOT )? ( LIKE e= expression ( ESCAPE expression )? -> {$b.text == null}? ^( LIKE $lhs $e) -> ^( NOT ^( LIKE $lhs $e) ) | BETWEEN l= expression AND h= expression -> {$b.text == null}? ^( BETWEEN $lhs $l $h) -> ^( NOT ^( BETWEEN $lhs $l $h) ) | inVar= IN LPAREN ( ( selectStatement )=>x= selectStatement -> {$b.text == null}? ^( IN $lhs selectStatement ) -> ^( NOT ^( IN $lhs selectStatement ) ) | re2+= expression ( COMMA re2+= expression )* -> {$b.text == null}? ^( IN $lhs ^( ARRAY ( $re2)+ ) ) -> ^( NOT ^( IN $lhs ^( ARRAY ( $re2)+ ) ) ) ) RPAREN ) | CONTAINS LPAREN ( dbObject | STAR ) COMMA ( stringLiteral | Variable ) RPAREN | FREETEXT LPAREN ( dbObject | STAR ) COMMA ( stringLiteral | Variable ) RPAREN ) | existsVar= EXISTS LPAREN y= selectStatement RPAREN -> ^( EXISTS selectStatement ) )"; }
        }

    }

    const string DFA40_eotS =
        "\x1a\uffff";
    const string DFA40_eofS =
        "\x1a\uffff";
    const string DFA40_minS =
        "\x01\x21\x19\uffff";
    const string DFA40_maxS =
        "\x01\u012a\x19\uffff";
    const string DFA40_acceptS =
        "\x01\uffff\x01\x01\x15\uffff\x01\x02\x02\uffff";
    const string DFA40_specialS =
        "\x1a\uffff}>";
    static readonly string[] DFA40_transitionS = {
            "\x01\x17\x02\uffff\x01\x17\x03\uffff\x01\x01\x01\uffff\x01"+
            "\x01\x02\uffff\x01\x01\x05\uffff\x02\x01\x08\uffff\x01\x01\x06"+
            "\uffff\x01\x01\x03\uffff\x02\x01\x0f\uffff\x01\x01\x09\uffff"+
            "\x04\x01\x04\uffff\x01\x01\x09\uffff\x01\x01\x04\uffff\x01\x01"+
            "\x09\uffff\x02\x01\x02\uffff\x01\x01\x03\uffff\x03\x01\x02\uffff"+
            "\x01\x01\x02\uffff\x01\x01\x0e\uffff\x01\x01\x09\uffff\x01\x01"+
            "\x01\uffff\x02\x01\x01\uffff\x01\x01\x02\uffff\x02\x01\x05\uffff"+
            "\x02\x01\x01\uffff\x01\x01\x01\uffff\x02\x01\x04\uffff\x02\x01"+
            "\x03\uffff\x01\x17\x01\uffff\x03\x01\x02\uffff\x01\x01\x0b\uffff"+
            "\x01\x01\x05\uffff\x01\x01\x06\uffff\x24\x01\x01\uffff\x01\x01"+
            "\x02\uffff\x01\x01\x01\uffff\x01\x01\x03\uffff\x02\x01\x06\uffff"+
            "\x09\x01",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA40_eot = DFA.UnpackEncodedString(DFA40_eotS);
    static readonly short[] DFA40_eof = DFA.UnpackEncodedString(DFA40_eofS);
    static readonly char[] DFA40_min = DFA.UnpackEncodedStringToUnsignedChars(DFA40_minS);
    static readonly char[] DFA40_max = DFA.UnpackEncodedStringToUnsignedChars(DFA40_maxS);
    static readonly short[] DFA40_accept = DFA.UnpackEncodedString(DFA40_acceptS);
    static readonly short[] DFA40_special = DFA.UnpackEncodedString(DFA40_specialS);
    static readonly short[][] DFA40_transition = DFA.UnpackEncodedStringArray(DFA40_transitionS);

    protected class DFA40 : DFA
    {
        public DFA40(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 40;
            this.eot = DFA40_eot;
            this.eof = DFA40_eof;
            this.min = DFA40_min;
            this.max = DFA40_max;
            this.accept = DFA40_accept;
            this.special = DFA40_special;
            this.transition = DFA40_transition;

        }

        override public string Description
        {
            get { return "568:31: (rhs= expression | (mod= ALL | mod= SOME | mod= ANY ) LPAREN ss= selectStatement RPAREN )"; }
        }

    }

    const string DFA43_eotS =
        "\x19\uffff";
    const string DFA43_eofS =
        "\x01\x02\x18\uffff";
    const string DFA43_minS =
        "\x01\x23\x18\uffff";
    const string DFA43_maxS =
        "\x01\u0113\x18\uffff";
    const string DFA43_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x16\uffff";
    const string DFA43_specialS =
        "\x19\uffff}>";
    static readonly string[] DFA43_transitionS = {
            "\x01\x02\x18\uffff\x01\x02\x06\uffff\x01\x02\x19\uffff\x01"+
            "\x01\x01\x02\x0b\uffff\x01\x02\x05\uffff\x01\x02\x03\uffff\x02"+
            "\x02\x08\uffff\x01\x02\x01\uffff\x01\x02\x02\uffff\x01\x02\x04"+
            "\uffff\x01\x02\x03\uffff\x01\x02\x01\uffff\x01\x02\x09\uffff"+
            "\x01\x02\x05\uffff\x03\x02\x14\uffff\x01\x02\x06\uffff\x01\x02"+
            "\x15\uffff\x01\x02\x08\uffff\x01\x02\x0c\uffff\x01\x02\x27\uffff"+
            "\x01\x02\x01\uffff\x02\x02",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA43_eot = DFA.UnpackEncodedString(DFA43_eotS);
    static readonly short[] DFA43_eof = DFA.UnpackEncodedString(DFA43_eofS);
    static readonly char[] DFA43_min = DFA.UnpackEncodedStringToUnsignedChars(DFA43_minS);
    static readonly char[] DFA43_max = DFA.UnpackEncodedStringToUnsignedChars(DFA43_maxS);
    static readonly short[] DFA43_accept = DFA.UnpackEncodedString(DFA43_acceptS);
    static readonly short[] DFA43_special = DFA.UnpackEncodedString(DFA43_specialS);
    static readonly short[][] DFA43_transition = DFA.UnpackEncodedStringArray(DFA43_transitionS);

    protected class DFA43 : DFA
    {
        public DFA43(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 43;
            this.eot = DFA43_eot;
            this.eof = DFA43_eof;
            this.min = DFA43_min;
            this.max = DFA43_max;
            this.accept = DFA43_accept;
            this.special = DFA43_special;
            this.transition = DFA43_transition;

        }

        override public string Description
        {
            get { return "581:29: ( ESCAPE expression )?"; }
        }

    }

    const string DFA45_eotS =
        "\x2f\uffff";
    const string DFA45_eofS =
        "\x2f\uffff";
    const string DFA45_minS =
        "\x01\x28\x01\uffff\x01\x28\x15\uffff\x02\x00\x15\uffff";
    const string DFA45_maxS =
        "\x01\u012a\x01\uffff\x01\u012a\x15\uffff\x02\x00\x15\uffff";
    const string DFA45_acceptS =
        "\x01\uffff\x01\x01\x01\uffff\x01\x02\x2b\uffff";
    const string DFA45_specialS =
        "\x01\x00\x17\uffff\x01\x01\x01\x02\x15\uffff}>";
    static readonly string[] DFA45_transitionS = {
            "\x01\x03\x01\uffff\x01\x03\x02\uffff\x01\x03\x05\uffff\x02"+
            "\x03\x08\uffff\x01\x03\x06\uffff\x01\x03\x03\uffff\x02\x03\x0f"+
            "\uffff\x01\x03\x09\uffff\x04\x03\x04\uffff\x01\x03\x09\uffff"+
            "\x01\x03\x04\uffff\x01\x03\x09\uffff\x02\x03\x02\uffff\x01\x03"+
            "\x03\uffff\x03\x03\x02\uffff\x01\x03\x02\uffff\x01\x03\x0e\uffff"+
            "\x01\x03\x09\uffff\x01\x03\x01\uffff\x02\x03\x01\uffff\x01\x03"+
            "\x02\uffff\x02\x03\x05\uffff\x02\x03\x01\uffff\x01\x03\x01\uffff"+
            "\x02\x03\x03\uffff\x01\x01\x02\x03\x05\uffff\x03\x03\x02\uffff"+
            "\x01\x03\x0b\uffff\x01\x03\x05\uffff\x01\x03\x06\uffff\x24\x03"+
            "\x01\uffff\x01\x02\x02\uffff\x01\x03\x01\uffff\x01\x03\x03\uffff"+
            "\x02\x03\x06\uffff\x09\x03",
            "",
            "\x01\x03\x01\uffff\x01\x03\x02\uffff\x01\x03\x05\uffff\x02"+
            "\x03\x08\uffff\x01\x03\x06\uffff\x01\x03\x03\uffff\x02\x03\x0f"+
            "\uffff\x01\x03\x09\uffff\x04\x03\x04\uffff\x01\x03\x09\uffff"+
            "\x01\x03\x04\uffff\x01\x03\x09\uffff\x02\x03\x02\uffff\x01\x03"+
            "\x03\uffff\x03\x03\x02\uffff\x01\x03\x02\uffff\x01\x03\x0e\uffff"+
            "\x01\x03\x09\uffff\x01\x03\x01\uffff\x02\x03\x01\uffff\x01\x03"+
            "\x02\uffff\x02\x03\x05\uffff\x02\x03\x01\uffff\x01\x03\x01\uffff"+
            "\x02\x03\x03\uffff\x01\x18\x02\x03\x05\uffff\x03\x03\x02\uffff"+
            "\x01\x03\x0b\uffff\x01\x03\x05\uffff\x01\x03\x06\uffff\x24\x03"+
            "\x01\uffff\x01\x19\x02\uffff\x01\x03\x01\uffff\x01\x03\x03\uffff"+
            "\x02\x03\x06\uffff\x09\x03",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA45_eot = DFA.UnpackEncodedString(DFA45_eotS);
    static readonly short[] DFA45_eof = DFA.UnpackEncodedString(DFA45_eofS);
    static readonly char[] DFA45_min = DFA.UnpackEncodedStringToUnsignedChars(DFA45_minS);
    static readonly char[] DFA45_max = DFA.UnpackEncodedStringToUnsignedChars(DFA45_maxS);
    static readonly short[] DFA45_accept = DFA.UnpackEncodedString(DFA45_acceptS);
    static readonly short[] DFA45_special = DFA.UnpackEncodedString(DFA45_specialS);
    static readonly short[][] DFA45_transition = DFA.UnpackEncodedStringArray(DFA45_transitionS);

    protected class DFA45 : DFA
    {
        public DFA45(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 45;
            this.eot = DFA45_eot;
            this.eof = DFA45_eof;
            this.min = DFA45_min;
            this.max = DFA45_max;
            this.accept = DFA45_accept;
            this.special = DFA45_special;
            this.transition = DFA45_transition;

        }

        override public string Description
        {
            get { return "587:29: ( ( selectStatement )=>x= selectStatement -> {$b.text == null}? ^( IN $lhs selectStatement ) -> ^( NOT ^( IN $lhs selectStatement ) ) | re2+= expression ( COMMA re2+= expression )* -> {$b.text == null}? ^( IN $lhs ^( ARRAY ( $re2)+ ) ) -> ^( NOT ^( IN $lhs ^( ARRAY ( $re2)+ ) ) ) )"; }
        }

    }


    protected internal int DFA45_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA45_0 = input.LA(1);

                   	 
                   	int index45_0 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (LA45_0 == SELECT) && (synpred68_Sql()) ) { s = 1; }

                   	else if ( (LA45_0 == LPAREN) ) { s = 2; }

                   	else if ( (LA45_0 == AUTO || LA45_0 == BASE64 || LA45_0 == BINARY || (LA45_0 >= CASE && LA45_0 <= CAST) || LA45_0 == CONCAT || LA45_0 == CUBE || (LA45_0 >= CURRENT_TIMESTAMP && LA45_0 <= CURRENT_USER) || LA45_0 == ELEMENTS || (LA45_0 >= EXPAND && LA45_0 <= FASTFIRSTROW) || LA45_0 == FORCE || LA45_0 == HASH || LA45_0 == IDENTITYCOL || (LA45_0 >= KEEP && LA45_0 <= KEEPFIXED) || LA45_0 == LEFT || (LA45_0 >= LOOP && LA45_0 <= MERGE) || LA45_0 == NOLOCK || LA45_0 == NULL || LA45_0 == PAGLOCK || LA45_0 == RAW || (LA45_0 >= READCOMMITED && LA45_0 <= READPAST) || LA45_0 == READUNCOMMITED || (LA45_0 >= REMOTE && LA45_0 <= REPEATABLEREAD) || (LA45_0 >= RIGHT && LA45_0 <= ROBUST) || LA45_0 == ROLLUP || (LA45_0 >= ROWGUIDCOL && LA45_0 <= ROWLOCK) || (LA45_0 >= SERIALIZABLE && LA45_0 <= SESSION_USER) || (LA45_0 >= SYSTEM_USER && LA45_0 <= TABLOCKX) || LA45_0 == TIES || LA45_0 == UPDLOCK || LA45_0 == VIEWS || (LA45_0 >= XLOCK && LA45_0 <= F_VERSION) || LA45_0 == Integer || LA45_0 == Variable || (LA45_0 >= PLUS && LA45_0 <= MINUS) || (LA45_0 >= UnicodeStringLiteral && LA45_0 <= TILDE)) ) { s = 3; }

                   	 
                   	input.Seek(index45_0);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 1 : 
                   	int LA45_24 = input.LA(1);

                   	 
                   	int index45_24 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred68_Sql()) ) { s = 1; }

                   	else if ( (true) ) { s = 3; }

                   	 
                   	input.Seek(index45_24);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 2 : 
                   	int LA45_25 = input.LA(1);

                   	 
                   	int index45_25 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred68_Sql()) ) { s = 1; }

                   	else if ( (true) ) { s = 3; }

                   	 
                   	input.Seek(index45_25);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae45 =
            new NoViableAltException(dfa.Description, 45, _s, input);
        dfa.Error(nvae45);
        throw nvae45;
    }
    const string DFA59_eotS =
        "\x18\uffff";
    const string DFA59_eofS =
        "\x18\uffff";
    const string DFA59_minS =
        "\x01\x28\x17\uffff";
    const string DFA59_maxS =
        "\x01\u012a\x17\uffff";
    const string DFA59_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x15\uffff";
    const string DFA59_specialS =
        "\x18\uffff}>";
    static readonly string[] DFA59_transitionS = {
            "\x01\x02\x01\uffff\x01\x02\x02\uffff\x01\x02\x05\uffff\x02"+
            "\x02\x08\uffff\x01\x02\x06\uffff\x01\x02\x03\uffff\x02\x02\x0f"+
            "\uffff\x01\x02\x09\uffff\x04\x02\x04\uffff\x01\x02\x09\uffff"+
            "\x01\x02\x04\uffff\x01\x02\x09\uffff\x02\x02\x02\uffff\x01\x02"+
            "\x03\uffff\x03\x02\x02\uffff\x01\x02\x02\uffff\x01\x02\x0e\uffff"+
            "\x01\x02\x09\uffff\x01\x02\x01\uffff\x02\x02\x01\uffff\x01\x02"+
            "\x02\uffff\x02\x02\x05\uffff\x02\x02\x01\uffff\x01\x02\x01\uffff"+
            "\x02\x02\x04\uffff\x02\x02\x05\uffff\x03\x02\x02\uffff\x01\x02"+
            "\x0b\uffff\x01\x02\x05\uffff\x01\x02\x06\uffff\x24\x02\x01\uffff"+
            "\x01\x02\x02\uffff\x01\x02\x01\x01\x01\x02\x03\uffff\x02\x02"+
            "\x06\uffff\x09\x02",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA59_eot = DFA.UnpackEncodedString(DFA59_eotS);
    static readonly short[] DFA59_eof = DFA.UnpackEncodedString(DFA59_eofS);
    static readonly char[] DFA59_min = DFA.UnpackEncodedStringToUnsignedChars(DFA59_minS);
    static readonly char[] DFA59_max = DFA.UnpackEncodedStringToUnsignedChars(DFA59_maxS);
    static readonly short[] DFA59_accept = DFA.UnpackEncodedString(DFA59_acceptS);
    static readonly short[] DFA59_special = DFA.UnpackEncodedString(DFA59_specialS);
    static readonly short[][] DFA59_transition = DFA.UnpackEncodedStringArray(DFA59_transitionS);

    protected class DFA59 : DFA
    {
        public DFA59(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 59;
            this.eot = DFA59_eot;
            this.eof = DFA59_eof;
            this.min = DFA59_min;
            this.max = DFA59_max;
            this.accept = DFA59_accept;
            this.special = DFA59_special;
            this.transition = DFA59_transition;

        }

        override public string Description
        {
            get { return "610:1: selectItem : ( STAR | ( ( alias2 )=> ( ( alias2 dbObject COMMA )=> alias2 column -> ^( SELECTITEM column alias2 ) | ( alias2 dbObject ( binaryOperator | LPAREN ) )=> alias2 expression -> ^( SELECTITEM expression alias2 ) | ( alias2 column )=> alias2 column -> ^( SELECTITEM column alias2 ) | ( alias2 expression )=> alias2 expression -> ^( SELECTITEM expression alias2 ) ) | ( tableColumns )=> tableColumns -> ^( SELECTITEM tableColumns ) | ( dbObject ( alias1 )? COMMA )=> column ( alias1 )? -> ^( SELECTITEM column ( alias1 )? ) | ( dbObject ( binaryOperator | LPAREN ) )=> expression ( alias1 )? -> ^( SELECTITEM expression ( alias1 )? ) | ( column )=> column ( alias1 )? -> ^( SELECTITEM column ( alias1 )? ) | ( expression )=> expression ( alias1 )? -> ^( SELECTITEM expression ( alias1 )? ) ) );"; }
        }

    }

    const string DFA58_eotS =
        "\u01b5\uffff";
    const string DFA58_eofS =
        "\u01b5\uffff";
    const string DFA58_minS =
        "\x01\x28\x03\u0118\x02\u0119\x05\x28\x01\u0118\x09\x00\x02\u0111"+
        "\x72\uffff\x68\x00\u00c2\uffff\x02\x00";
    const string DFA58_maxS =
        "\x01\u012a\x01\u0121\x01\u0118\x03\u0121\x01\u0129\x01\u012a\x02"+
        "\u0129\x01\u012a\x01\u0121\x09\x00\x02\u0111\x72\uffff\x68\x00\u00c2"+
        "\uffff\x02\x00";
    const string DFA58_acceptS =
        "\x17\uffff\x01\x02\x11\uffff\x01\x02\x01\x01\x03\uffff\x01\x03"+
        "\x01\x04\x01\x05\x01\x06\x01\x01\x14\uffff\x01\x02\x01\x01\x13\uffff"+
        "\x02\x02\x14\uffff\x02\x02\x14\uffff\x01\x02\x68\uffff\x01\x02\x12"+
        "\uffff\x01\x01\x02\uffff\x01\x02\u00ad\uffff";
    const string DFA58_specialS =
        "\x01\uffff\x01\x00\x01\x01\x01\x02\x01\x03\x01\x04\x05\uffff\x01"+
        "\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01"+
        "\x0d\x01\x0e\x74\uffff\x01\x0f\x01\x10\x01\x11\x01\x12\x01\x13\x01"+
        "\x14\x01\x15\x01\x16\x01\x17\x01\x18\x01\x19\x01\x1a\x01\x1b\x01"+
        "\x1c\x01\x1d\x01\x1e\x01\x1f\x01\x20\x01\x21\x01\x22\x01\x23\x01"+
        "\x24\x01\x25\x01\x26\x01\x27\x01\x28\x01\x29\x01\x2a\x01\x2b\x01"+
        "\x2c\x01\x2d\x01\x2e\x01\x2f\x01\x30\x01\x31\x01\x32\x01\x33\x01"+
        "\x34\x01\x35\x01\x36\x01\x37\x01\x38\x01\x39\x01\x3a\x01\x3b\x01"+
        "\x3c\x01\x3d\x01\x3e\x01\x3f\x01\x40\x01\x41\x01\x42\x01\x43\x01"+
        "\x44\x01\x45\x01\x46\x01\x47\x01\x48\x01\x49\x01\x4a\x01\x4b\x01"+
        "\x4c\x01\x4d\x01\x4e\x01\x4f\x01\x50\x01\x51\x01\x52\x01\x53\x01"+
        "\x54\x01\x55\x01\x56\x01\x57\x01\x58\x01\x59\x01\x5a\x01\x5b\x01"+
        "\x5c\x01\x5d\x01\x5e\x01\x5f\x01\x60\x01\x61\x01\x62\x01\x63\x01"+
        "\x64\x01\x65\x01\x66\x01\x67\x01\x68\x01\x69\x01\x6a\x01\x6b\x01"+
        "\x6c\x01\x6d\x01\x6e\x01\x6f\x01\x70\x01\x71\x01\x72\x01\x73\x01"+
        "\x74\x01\x75\x01\x76\u00c2\uffff\x01\x77\x01\x78}>";
    static readonly string[] DFA58_transitionS = {
            "\x01\x0b\x01\uffff\x01\x0b\x02\uffff\x01\x0b\x05\uffff\x01"+
            "\x0a\x01\x03\x08\uffff\x01\x0b\x06\uffff\x01\x0b\x03\uffff\x02"+
            "\x0c\x0f\uffff\x01\x0b\x09\uffff\x04\x0b\x04\uffff\x01\x0b\x09"+
            "\uffff\x01\x0b\x04\uffff\x01\x04\x09\uffff\x02\x0b\x02\uffff"+
            "\x01\x15\x03\uffff\x03\x0b\x02\uffff\x01\x0b\x02\uffff\x01\x0f"+
            "\x0e\uffff\x01\x0b\x09\uffff\x01\x0b\x01\uffff\x02\x0b\x01\uffff"+
            "\x01\x0b\x02\uffff\x02\x0b\x05\uffff\x01\x16\x01\x0b\x01\uffff"+
            "\x01\x0b\x01\uffff\x01\x05\x01\x0b\x04\uffff\x01\x0b\x01\x0c"+
            "\x05\uffff\x01\x0c\x02\x0b\x02\uffff\x01\x0b\x0b\uffff\x01\x0b"+
            "\x05\uffff\x01\x0b\x06\uffff\x03\x0b\x21\x13\x01\uffff\x01\x07"+
            "\x02\uffff\x01\x0d\x01\uffff\x01\x14\x03\uffff\x01\x06\x01\x08"+
            "\x06\uffff\x02\x02\x02\x01\x01\x0e\x01\x10\x01\x11\x01\x12\x01"+
            "\x09",
            "\x01\x2a\x01\x29\x07\uffff\x01\x17",
            "\x01\x32",
            "\x01\x48\x01\x5c\x07\uffff\x01\x47",
            "\x01\x72\x07\uffff\x01\x5d",
            "\x01\u0088\x07\uffff\x01\x73",
            "\x01\u009a\x01\uffff\x01\u009a\x02\uffff\x01\u009a\x05\uffff"+
            "\x01\u0089\x01\u008a\x08\uffff\x01\u009a\x06\uffff\x01\u009a"+
            "\x03\uffff\x02\u008b\x0f\uffff\x01\u009a\x09\uffff\x04\u009a"+
            "\x04\uffff\x01\u009a\x09\uffff\x01\u009a\x04\uffff\x01\u0098"+
            "\x09\uffff\x02\u009a\x02\uffff\x01\u0095\x03\uffff\x03\u009a"+
            "\x02\uffff\x01\u009a\x02\uffff\x01\u008e\x0e\uffff\x01\u009a"+
            "\x09\uffff\x01\u009a\x01\uffff\x02\u009a\x01\uffff\x01\u009a"+
            "\x02\uffff\x02\u009a\x05\uffff\x01\u0096\x01\u009a\x01\uffff"+
            "\x01\u009a\x01\uffff\x01\u0099\x01\u009a\x04\uffff\x01\u009a"+
            "\x01\u008b\x05\uffff\x01\u008b\x02\u009a\x02\uffff\x01\u009a"+
            "\x0b\uffff\x01\u009a\x05\uffff\x01\u009a\x06\uffff\x03\u009a"+
            "\x21\u0093\x01\uffff\x01\u009b\x02\uffff\x01\u008c\x01\uffff"+
            "\x01\u0094\x03\uffff\x01\u009c\x07\uffff\x02\u008f\x02\u0097"+
            "\x01\u008d\x01\u0090\x01\u0091\x01\u0092",
            "\x01\u00a7\x01\uffff\x01\u00a7\x02\uffff\x01\u00a7\x05\uffff"+
            "\x01\u00a6\x01\u00a1\x08\uffff\x01\u00a7\x06\uffff\x01\u00a7"+
            "\x03\uffff\x02\u00a8\x0f\uffff\x01\u00a7\x09\uffff\x04\u00a7"+
            "\x04\uffff\x01\u00a7\x09\uffff\x01\u00a7\x04\uffff\x01\u009f"+
            "\x09\uffff\x02\u00a7\x02\uffff\x01\u00b2\x03\uffff\x03\u00a7"+
            "\x02\uffff\x01\u00a7\x02\uffff\x01\u00ab\x0e\uffff\x01\u00a7"+
            "\x09\uffff\x01\u00a7\x01\uffff\x02\u00a7\x01\uffff\x01\u00a7"+
            "\x02\uffff\x02\u00a7\x05\uffff\x01\u00b3\x01\u00a7\x01\uffff"+
            "\x01\u00a7\x01\uffff\x01\u00a0\x01\u00a7\x03\uffff\x01\u00a3"+
            "\x01\u00a7\x01\u00a8\x05\uffff\x01\u00a8\x02\u00a7\x02\uffff"+
            "\x01\u00a7\x0b\uffff\x01\u00a7\x05\uffff\x01\u00a7\x06\uffff"+
            "\x03\u00a7\x21\u00b0\x01\uffff\x01\u00a2\x02\uffff\x01\u00a9"+
            "\x01\uffff\x01\u00b1\x03\uffff\x01\u009d\x01\u00a4\x06\uffff"+
            "\x02\u00ac\x02\u009e\x01\u00aa\x01\u00ad\x01\u00ae\x01\u00af"+
            "\x01\u00a5",
            "\x01\u00c5\x01\uffff\x01\u00c5\x02\uffff\x01\u00c5\x05\uffff"+
            "\x01\u00b4\x01\u00b5\x08\uffff\x01\u00c5\x06\uffff\x01\u00c5"+
            "\x03\uffff\x02\u00b6\x0f\uffff\x01\u00c5\x09\uffff\x04\u00c5"+
            "\x04\uffff\x01\u00c5\x09\uffff\x01\u00c5\x04\uffff\x01\u00c3"+
            "\x09\uffff\x02\u00c5\x02\uffff\x01\u00c0\x03\uffff\x03\u00c5"+
            "\x02\uffff\x01\u00c5\x02\uffff\x01\u00b9\x0e\uffff\x01\u00c5"+
            "\x09\uffff\x01\u00c5\x01\uffff\x02\u00c5\x01\uffff\x01\u00c5"+
            "\x02\uffff\x02\u00c5\x05\uffff\x01\u00c1\x01\u00c5\x01\uffff"+
            "\x01\u00c5\x01\uffff\x01\u00c4\x01\u00c5\x04\uffff\x01\u00c5"+
            "\x01\u00b6\x05\uffff\x01\u00b6\x02\u00c5\x02\uffff\x01\u00c5"+
            "\x0b\uffff\x01\u00c5\x05\uffff\x01\u00c5\x06\uffff\x03\u00c5"+
            "\x21\u00be\x01\uffff\x01\u00c6\x02\uffff\x01\u00b7\x01\uffff"+
            "\x01\u00bf\x0b\uffff\x02\u00ba\x02\u00c2\x01\u00b8\x01\u00bb"+
            "\x01\u00bc\x01\u00bd",
            "\x01\u00d8\x01\uffff\x01\u00d8\x02\uffff\x01\u00d8\x05\uffff"+
            "\x01\u00c7\x01\u00c8\x08\uffff\x01\u00d8\x06\uffff\x01\u00d8"+
            "\x03\uffff\x02\u00c9\x0f\uffff\x01\u00d8\x09\uffff\x04\u00d8"+
            "\x04\uffff\x01\u00d8\x09\uffff\x01\u00d8\x04\uffff\x01\u00d6"+
            "\x09\uffff\x02\u00d8\x02\uffff\x01\u00d3\x03\uffff\x03\u00d8"+
            "\x02\uffff\x01\u00d8\x02\uffff\x01\u00cc\x0e\uffff\x01\u00d8"+
            "\x09\uffff\x01\u00d8\x01\uffff\x02\u00d8\x01\uffff\x01\u00d8"+
            "\x02\uffff\x02\u00d8\x05\uffff\x01\u00d4\x01\u00d8\x01\uffff"+
            "\x01\u00d8\x01\uffff\x01\u00d7\x01\u00d8\x04\uffff\x01\u00d8"+
            "\x01\u00c9\x05\uffff\x01\u00c9\x02\u00d8\x02\uffff\x01\u00d8"+
            "\x0b\uffff\x01\u00d8\x05\uffff\x01\u00d8\x06\uffff\x03\u00d8"+
            "\x21\u00d1\x01\uffff\x01\u00d9\x02\uffff\x01\u00ca\x01\uffff"+
            "\x01\u00d2\x0b\uffff\x02\u00cd\x02\u00d5\x01\u00cb\x01\u00ce"+
            "\x01\u00cf\x01\u00d0",
            "\x01\u00ee\x01\uffff\x01\u00ee\x02\uffff\x01\u00ee\x05\uffff"+
            "\x01\u00dd\x01\u00de\x08\uffff\x01\u00ee\x06\uffff\x01\u00ee"+
            "\x03\uffff\x02\u00df\x0f\uffff\x01\u00ee\x09\uffff\x04\u00ee"+
            "\x04\uffff\x01\u00ee\x09\uffff\x01\u00ee\x04\uffff\x01\u00ec"+
            "\x09\uffff\x02\u00ee\x02\uffff\x01\u00e9\x03\uffff\x03\u00ee"+
            "\x02\uffff\x01\u00ee\x02\uffff\x01\u00e2\x0e\uffff\x01\u00ee"+
            "\x09\uffff\x01\u00ee\x01\uffff\x02\u00ee\x01\uffff\x01\u00ee"+
            "\x02\uffff\x02\u00ee\x05\uffff\x01\u00ea\x01\u00ee\x01\uffff"+
            "\x01\u00ee\x01\uffff\x01\u00ed\x01\u00ee\x04\uffff\x01\u00ee"+
            "\x01\u00df\x05\uffff\x01\u00df\x02\u00ee\x02\uffff\x01\u00ee"+
            "\x0b\uffff\x01\u00ee\x05\uffff\x01\u00ee\x01\uffff\x01\u00f0"+
            "\x04\uffff\x03\u00ee\x21\u00e7\x01\uffff\x01\u00ef\x02\uffff"+
            "\x01\u00e0\x01\uffff\x01\u00e8\x03\uffff\x01\u00da\x01\u00db"+
            "\x06\uffff\x02\u00e3\x02\u00eb\x01\u00e1\x01\u00e4\x01\u00e5"+
            "\x01\u00e6\x01\u00dc",
            "\x01\u0104\x01\u0107\x07\uffff\x01\u00f1",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\u01b3",
            "\x01\u01b4",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "\x01\uffff"
    };

    static readonly short[] DFA58_eot = DFA.UnpackEncodedString(DFA58_eotS);
    static readonly short[] DFA58_eof = DFA.UnpackEncodedString(DFA58_eofS);
    static readonly char[] DFA58_min = DFA.UnpackEncodedStringToUnsignedChars(DFA58_minS);
    static readonly char[] DFA58_max = DFA.UnpackEncodedStringToUnsignedChars(DFA58_maxS);
    static readonly short[] DFA58_accept = DFA.UnpackEncodedString(DFA58_acceptS);
    static readonly short[] DFA58_special = DFA.UnpackEncodedString(DFA58_specialS);
    static readonly short[][] DFA58_transition = DFA.UnpackEncodedStringArray(DFA58_transitionS);

    protected class DFA58 : DFA
    {
        public DFA58(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 58;
            this.eot = DFA58_eot;
            this.eof = DFA58_eof;
            this.min = DFA58_min;
            this.max = DFA58_max;
            this.accept = DFA58_accept;
            this.special = DFA58_special;
            this.transition = DFA58_transition;

        }

        override public string Description
        {
            get { return "613:7: ( ( alias2 )=> ( ( alias2 dbObject COMMA )=> alias2 column -> ^( SELECTITEM column alias2 ) | ( alias2 dbObject ( binaryOperator | LPAREN ) )=> alias2 expression -> ^( SELECTITEM expression alias2 ) | ( alias2 column )=> alias2 column -> ^( SELECTITEM column alias2 ) | ( alias2 expression )=> alias2 expression -> ^( SELECTITEM expression alias2 ) ) | ( tableColumns )=> tableColumns -> ^( SELECTITEM tableColumns ) | ( dbObject ( alias1 )? COMMA )=> column ( alias1 )? -> ^( SELECTITEM column ( alias1 )? ) | ( dbObject ( binaryOperator | LPAREN ) )=> expression ( alias1 )? -> ^( SELECTITEM expression ( alias1 )? ) | ( column )=> column ( alias1 )? -> ^( SELECTITEM column ( alias1 )? ) | ( expression )=> expression ( alias1 )? -> ^( SELECTITEM expression ( alias1 )? ) )"; }
        }

    }


    protected internal int DFA58_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA58_1 = input.LA(1);

                   	 
                   	int index58_1 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (LA58_1 == DOT) && (synpred84_Sql()) ) { s = 23; }

                   	else if ( (LA58_1 == DOT_STAR) && (synpred84_Sql()) ) { s = 41; }

                   	else if ( (LA58_1 == ASSIGNEQUAL) && (synpred78_Sql()) ) { s = 42; }

                   	else if ( (synpred86_Sql()) ) { s = 46; }

                   	else if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred91_Sql()) ) { s = 48; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_1);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 1 : 
                   	int LA58_2 = input.LA(1);

                   	 
                   	int index58_2 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (LA58_2 == ASSIGNEQUAL) && (synpred78_Sql()) ) { s = 50; }

                   	else if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_2);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 2 : 
                   	int LA58_3 = input.LA(1);

                   	 
                   	int index58_3 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (LA58_3 == DOT) && (synpred84_Sql()) ) { s = 71; }

                   	else if ( (LA58_3 == ASSIGNEQUAL) && (synpred78_Sql()) ) { s = 72; }

                   	else if ( (LA58_3 == DOT_STAR) && (synpred84_Sql()) ) { s = 92; }

                   	else if ( (synpred86_Sql()) ) { s = 46; }

                   	else if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred91_Sql()) ) { s = 48; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_3);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 3 : 
                   	int LA58_4 = input.LA(1);

                   	 
                   	int index58_4 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (LA58_4 == DOT) && (synpred84_Sql()) ) { s = 93; }

                   	else if ( (LA58_4 == DOT_STAR) && (synpred84_Sql()) ) { s = 114; }

                   	else if ( (synpred86_Sql()) ) { s = 46; }

                   	else if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred91_Sql()) ) { s = 48; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_4);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 4 : 
                   	int LA58_5 = input.LA(1);

                   	 
                   	int index58_5 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (LA58_5 == DOT) && (synpred84_Sql()) ) { s = 115; }

                   	else if ( (LA58_5 == DOT_STAR) && (synpred84_Sql()) ) { s = 136; }

                   	else if ( (synpred86_Sql()) ) { s = 46; }

                   	else if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred91_Sql()) ) { s = 48; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_5);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 5 : 
                   	int LA58_11 = input.LA(1);

                   	 
                   	int index58_11 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (LA58_11 == DOT) && (synpred84_Sql()) ) { s = 241; }

                   	else if ( (LA58_11 == ASSIGNEQUAL) && (synpred78_Sql()) ) { s = 260; }

                   	else if ( (LA58_11 == DOT_STAR) && (synpred84_Sql()) ) { s = 263; }

                   	else if ( (synpred86_Sql()) ) { s = 46; }

                   	else if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred91_Sql()) ) { s = 48; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_11);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 6 : 
                   	int LA58_12 = input.LA(1);

                   	 
                   	int index58_12 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_12);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 7 : 
                   	int LA58_13 = input.LA(1);

                   	 
                   	int index58_13 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_13);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 8 : 
                   	int LA58_14 = input.LA(1);

                   	 
                   	int index58_14 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_14);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 9 : 
                   	int LA58_15 = input.LA(1);

                   	 
                   	int index58_15 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_15);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 10 : 
                   	int LA58_16 = input.LA(1);

                   	 
                   	int index58_16 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_16);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 11 : 
                   	int LA58_17 = input.LA(1);

                   	 
                   	int index58_17 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_17);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 12 : 
                   	int LA58_18 = input.LA(1);

                   	 
                   	int index58_18 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_18);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 13 : 
                   	int LA58_19 = input.LA(1);

                   	 
                   	int index58_19 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_19);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 14 : 
                   	int LA58_20 = input.LA(1);

                   	 
                   	int index58_20 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_20);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 15 : 
                   	int LA58_137 = input.LA(1);

                   	 
                   	int index58_137 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_137);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 16 : 
                   	int LA58_138 = input.LA(1);

                   	 
                   	int index58_138 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred86_Sql()) ) { s = 46; }

                   	else if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred91_Sql()) ) { s = 48; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_138);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 17 : 
                   	int LA58_139 = input.LA(1);

                   	 
                   	int index58_139 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_139);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 18 : 
                   	int LA58_140 = input.LA(1);

                   	 
                   	int index58_140 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_140);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 19 : 
                   	int LA58_141 = input.LA(1);

                   	 
                   	int index58_141 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_141);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 20 : 
                   	int LA58_142 = input.LA(1);

                   	 
                   	int index58_142 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_142);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 21 : 
                   	int LA58_143 = input.LA(1);

                   	 
                   	int index58_143 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_143);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 22 : 
                   	int LA58_144 = input.LA(1);

                   	 
                   	int index58_144 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_144);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 23 : 
                   	int LA58_145 = input.LA(1);

                   	 
                   	int index58_145 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_145);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 24 : 
                   	int LA58_146 = input.LA(1);

                   	 
                   	int index58_146 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_146);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 25 : 
                   	int LA58_147 = input.LA(1);

                   	 
                   	int index58_147 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_147);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 26 : 
                   	int LA58_148 = input.LA(1);

                   	 
                   	int index58_148 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_148);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 27 : 
                   	int LA58_149 = input.LA(1);

                   	 
                   	int index58_149 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_149);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 28 : 
                   	int LA58_150 = input.LA(1);

                   	 
                   	int index58_150 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_150);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 29 : 
                   	int LA58_151 = input.LA(1);

                   	 
                   	int index58_151 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred86_Sql()) ) { s = 46; }

                   	else if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred91_Sql()) ) { s = 48; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_151);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 30 : 
                   	int LA58_152 = input.LA(1);

                   	 
                   	int index58_152 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred86_Sql()) ) { s = 46; }

                   	else if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred91_Sql()) ) { s = 48; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_152);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 31 : 
                   	int LA58_153 = input.LA(1);

                   	 
                   	int index58_153 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred86_Sql()) ) { s = 46; }

                   	else if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred91_Sql()) ) { s = 48; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_153);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 32 : 
                   	int LA58_154 = input.LA(1);

                   	 
                   	int index58_154 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred86_Sql()) ) { s = 46; }

                   	else if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred91_Sql()) ) { s = 48; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_154);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 33 : 
                   	int LA58_155 = input.LA(1);

                   	 
                   	int index58_155 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred86_Sql()) ) { s = 46; }

                   	else if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred91_Sql()) ) { s = 48; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_155);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 34 : 
                   	int LA58_156 = input.LA(1);

                   	 
                   	int index58_156 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred86_Sql()) ) { s = 46; }

                   	else if ( (synpred91_Sql()) ) { s = 48; }

                   	 
                   	input.Seek(index58_156);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 35 : 
                   	int LA58_157 = input.LA(1);

                   	 
                   	int index58_157 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred86_Sql()) ) { s = 46; }

                   	else if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred91_Sql()) ) { s = 48; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_157);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 36 : 
                   	int LA58_158 = input.LA(1);

                   	 
                   	int index58_158 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred86_Sql()) ) { s = 46; }

                   	else if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred91_Sql()) ) { s = 48; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_158);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 37 : 
                   	int LA58_159 = input.LA(1);

                   	 
                   	int index58_159 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred86_Sql()) ) { s = 46; }

                   	else if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred91_Sql()) ) { s = 48; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_159);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 38 : 
                   	int LA58_160 = input.LA(1);

                   	 
                   	int index58_160 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred86_Sql()) ) { s = 46; }

                   	else if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred91_Sql()) ) { s = 48; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_160);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 39 : 
                   	int LA58_161 = input.LA(1);

                   	 
                   	int index58_161 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred86_Sql()) ) { s = 46; }

                   	else if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred91_Sql()) ) { s = 48; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_161);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 40 : 
                   	int LA58_162 = input.LA(1);

                   	 
                   	int index58_162 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred86_Sql()) ) { s = 46; }

                   	else if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred91_Sql()) ) { s = 48; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_162);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 41 : 
                   	int LA58_163 = input.LA(1);

                   	 
                   	int index58_163 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_163);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 42 : 
                   	int LA58_164 = input.LA(1);

                   	 
                   	int index58_164 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_164);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 43 : 
                   	int LA58_165 = input.LA(1);

                   	 
                   	int index58_165 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_165);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 44 : 
                   	int LA58_166 = input.LA(1);

                   	 
                   	int index58_166 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_166);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 45 : 
                   	int LA58_167 = input.LA(1);

                   	 
                   	int index58_167 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred86_Sql()) ) { s = 46; }

                   	else if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred91_Sql()) ) { s = 48; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_167);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 46 : 
                   	int LA58_168 = input.LA(1);

                   	 
                   	int index58_168 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_168);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 47 : 
                   	int LA58_169 = input.LA(1);

                   	 
                   	int index58_169 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_169);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 48 : 
                   	int LA58_170 = input.LA(1);

                   	 
                   	int index58_170 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_170);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 49 : 
                   	int LA58_171 = input.LA(1);

                   	 
                   	int index58_171 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_171);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 50 : 
                   	int LA58_172 = input.LA(1);

                   	 
                   	int index58_172 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_172);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 51 : 
                   	int LA58_173 = input.LA(1);

                   	 
                   	int index58_173 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_173);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 52 : 
                   	int LA58_174 = input.LA(1);

                   	 
                   	int index58_174 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_174);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 53 : 
                   	int LA58_175 = input.LA(1);

                   	 
                   	int index58_175 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_175);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 54 : 
                   	int LA58_176 = input.LA(1);

                   	 
                   	int index58_176 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_176);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 55 : 
                   	int LA58_177 = input.LA(1);

                   	 
                   	int index58_177 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_177);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 56 : 
                   	int LA58_178 = input.LA(1);

                   	 
                   	int index58_178 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_178);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 57 : 
                   	int LA58_179 = input.LA(1);

                   	 
                   	int index58_179 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_179);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 58 : 
                   	int LA58_180 = input.LA(1);

                   	 
                   	int index58_180 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_180);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 59 : 
                   	int LA58_181 = input.LA(1);

                   	 
                   	int index58_181 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_181);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 60 : 
                   	int LA58_182 = input.LA(1);

                   	 
                   	int index58_182 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_182);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 61 : 
                   	int LA58_183 = input.LA(1);

                   	 
                   	int index58_183 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_183);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 62 : 
                   	int LA58_184 = input.LA(1);

                   	 
                   	int index58_184 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_184);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 63 : 
                   	int LA58_185 = input.LA(1);

                   	 
                   	int index58_185 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_185);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 64 : 
                   	int LA58_186 = input.LA(1);

                   	 
                   	int index58_186 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_186);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 65 : 
                   	int LA58_187 = input.LA(1);

                   	 
                   	int index58_187 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_187);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 66 : 
                   	int LA58_188 = input.LA(1);

                   	 
                   	int index58_188 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_188);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 67 : 
                   	int LA58_189 = input.LA(1);

                   	 
                   	int index58_189 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_189);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 68 : 
                   	int LA58_190 = input.LA(1);

                   	 
                   	int index58_190 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_190);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 69 : 
                   	int LA58_191 = input.LA(1);

                   	 
                   	int index58_191 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_191);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 70 : 
                   	int LA58_192 = input.LA(1);

                   	 
                   	int index58_192 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_192);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 71 : 
                   	int LA58_193 = input.LA(1);

                   	 
                   	int index58_193 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_193);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 72 : 
                   	int LA58_194 = input.LA(1);

                   	 
                   	int index58_194 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_194);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 73 : 
                   	int LA58_195 = input.LA(1);

                   	 
                   	int index58_195 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_195);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 74 : 
                   	int LA58_196 = input.LA(1);

                   	 
                   	int index58_196 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_196);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 75 : 
                   	int LA58_197 = input.LA(1);

                   	 
                   	int index58_197 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_197);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 76 : 
                   	int LA58_198 = input.LA(1);

                   	 
                   	int index58_198 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_198);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 77 : 
                   	int LA58_199 = input.LA(1);

                   	 
                   	int index58_199 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_199);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 78 : 
                   	int LA58_200 = input.LA(1);

                   	 
                   	int index58_200 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_200);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 79 : 
                   	int LA58_201 = input.LA(1);

                   	 
                   	int index58_201 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_201);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 80 : 
                   	int LA58_202 = input.LA(1);

                   	 
                   	int index58_202 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_202);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 81 : 
                   	int LA58_203 = input.LA(1);

                   	 
                   	int index58_203 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_203);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 82 : 
                   	int LA58_204 = input.LA(1);

                   	 
                   	int index58_204 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_204);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 83 : 
                   	int LA58_205 = input.LA(1);

                   	 
                   	int index58_205 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_205);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 84 : 
                   	int LA58_206 = input.LA(1);

                   	 
                   	int index58_206 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_206);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 85 : 
                   	int LA58_207 = input.LA(1);

                   	 
                   	int index58_207 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_207);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 86 : 
                   	int LA58_208 = input.LA(1);

                   	 
                   	int index58_208 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_208);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 87 : 
                   	int LA58_209 = input.LA(1);

                   	 
                   	int index58_209 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_209);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 88 : 
                   	int LA58_210 = input.LA(1);

                   	 
                   	int index58_210 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_210);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 89 : 
                   	int LA58_211 = input.LA(1);

                   	 
                   	int index58_211 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_211);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 90 : 
                   	int LA58_212 = input.LA(1);

                   	 
                   	int index58_212 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_212);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 91 : 
                   	int LA58_213 = input.LA(1);

                   	 
                   	int index58_213 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_213);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 92 : 
                   	int LA58_214 = input.LA(1);

                   	 
                   	int index58_214 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_214);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 93 : 
                   	int LA58_215 = input.LA(1);

                   	 
                   	int index58_215 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_215);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 94 : 
                   	int LA58_216 = input.LA(1);

                   	 
                   	int index58_216 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_216);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 95 : 
                   	int LA58_217 = input.LA(1);

                   	 
                   	int index58_217 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_217);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 96 : 
                   	int LA58_218 = input.LA(1);

                   	 
                   	int index58_218 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_218);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 97 : 
                   	int LA58_219 = input.LA(1);

                   	 
                   	int index58_219 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_219);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 98 : 
                   	int LA58_220 = input.LA(1);

                   	 
                   	int index58_220 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_220);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 99 : 
                   	int LA58_221 = input.LA(1);

                   	 
                   	int index58_221 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_221);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 100 : 
                   	int LA58_222 = input.LA(1);

                   	 
                   	int index58_222 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_222);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 101 : 
                   	int LA58_223 = input.LA(1);

                   	 
                   	int index58_223 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_223);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 102 : 
                   	int LA58_224 = input.LA(1);

                   	 
                   	int index58_224 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_224);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 103 : 
                   	int LA58_225 = input.LA(1);

                   	 
                   	int index58_225 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_225);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 104 : 
                   	int LA58_226 = input.LA(1);

                   	 
                   	int index58_226 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_226);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 105 : 
                   	int LA58_227 = input.LA(1);

                   	 
                   	int index58_227 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_227);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 106 : 
                   	int LA58_228 = input.LA(1);

                   	 
                   	int index58_228 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_228);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 107 : 
                   	int LA58_229 = input.LA(1);

                   	 
                   	int index58_229 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_229);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 108 : 
                   	int LA58_230 = input.LA(1);

                   	 
                   	int index58_230 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_230);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 109 : 
                   	int LA58_231 = input.LA(1);

                   	 
                   	int index58_231 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_231);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 110 : 
                   	int LA58_232 = input.LA(1);

                   	 
                   	int index58_232 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_232);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 111 : 
                   	int LA58_233 = input.LA(1);

                   	 
                   	int index58_233 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_233);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 112 : 
                   	int LA58_234 = input.LA(1);

                   	 
                   	int index58_234 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_234);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 113 : 
                   	int LA58_235 = input.LA(1);

                   	 
                   	int index58_235 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_235);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 114 : 
                   	int LA58_236 = input.LA(1);

                   	 
                   	int index58_236 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_236);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 115 : 
                   	int LA58_237 = input.LA(1);

                   	 
                   	int index58_237 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_237);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 116 : 
                   	int LA58_238 = input.LA(1);

                   	 
                   	int index58_238 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_238);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 117 : 
                   	int LA58_239 = input.LA(1);

                   	 
                   	int index58_239 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_239);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 118 : 
                   	int LA58_240 = input.LA(1);

                   	 
                   	int index58_240 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_240);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 119 : 
                   	int LA58_435 = input.LA(1);

                   	 
                   	int index58_435 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_435);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 120 : 
                   	int LA58_436 = input.LA(1);

                   	 
                   	int index58_436 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred89_Sql()) ) { s = 47; }

                   	else if ( (synpred93_Sql()) ) { s = 49; }

                   	 
                   	input.Seek(index58_436);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae58 =
            new NoViableAltException(dfa.Description, 58, _s, input);
        dfa.Error(nvae58);
        throw nvae58;
    }
    const string DFA53_eotS =
        "\x0b\uffff";
    const string DFA53_eofS =
        "\x0b\uffff";
    const string DFA53_minS =
        "\x01\x28\x03\u0118\x03\x00\x04\uffff";
    const string DFA53_maxS =
        "\x01\u0125\x03\u0118\x03\x00\x04\uffff";
    const string DFA53_acceptS =
        "\x07\uffff\x01\x01\x01\x02\x01\x03\x01\x04";
    const string DFA53_specialS =
        "\x04\uffff\x01\x00\x01\x01\x01\x02\x04\uffff}>";
    static readonly string[] DFA53_transitionS = {
            "\x01\x03\x01\uffff\x01\x03\x02\uffff\x01\x03\x06\uffff\x01"+
            "\x03\x08\uffff\x01\x03\x06\uffff\x01\x03\x14\uffff\x01\x03\x09"+
            "\uffff\x04\x03\x04\uffff\x01\x03\x09\uffff\x01\x03\x0e\uffff"+
            "\x02\x03\x06\uffff\x03\x03\x02\uffff\x01\x03\x11\uffff\x01\x03"+
            "\x09\uffff\x01\x03\x01\uffff\x02\x03\x01\uffff\x01\x03\x02\uffff"+
            "\x02\x03\x06\uffff\x01\x03\x01\uffff\x01\x03\x02\uffff\x01\x03"+
            "\x04\uffff\x01\x03\x07\uffff\x02\x03\x02\uffff\x01\x03\x0b\uffff"+
            "\x01\x03\x05\uffff\x01\x03\x06\uffff\x03\x03\x33\uffff\x02\x02"+
            "\x02\x01",
            "\x01\x04",
            "\x01\x05",
            "\x01\x06",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA53_eot = DFA.UnpackEncodedString(DFA53_eotS);
    static readonly short[] DFA53_eof = DFA.UnpackEncodedString(DFA53_eofS);
    static readonly char[] DFA53_min = DFA.UnpackEncodedStringToUnsignedChars(DFA53_minS);
    static readonly char[] DFA53_max = DFA.UnpackEncodedStringToUnsignedChars(DFA53_maxS);
    static readonly short[] DFA53_accept = DFA.UnpackEncodedString(DFA53_acceptS);
    static readonly short[] DFA53_special = DFA.UnpackEncodedString(DFA53_specialS);
    static readonly short[][] DFA53_transition = DFA.UnpackEncodedStringArray(DFA53_transitionS);

    protected class DFA53 : DFA
    {
        public DFA53(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 53;
            this.eot = DFA53_eot;
            this.eof = DFA53_eof;
            this.min = DFA53_min;
            this.max = DFA53_max;
            this.accept = DFA53_accept;
            this.special = DFA53_special;
            this.transition = DFA53_transition;

        }

        override public string Description
        {
            get { return "615:19: ( ( alias2 dbObject COMMA )=> alias2 column -> ^( SELECTITEM column alias2 ) | ( alias2 dbObject ( binaryOperator | LPAREN ) )=> alias2 expression -> ^( SELECTITEM expression alias2 ) | ( alias2 column )=> alias2 column -> ^( SELECTITEM column alias2 ) | ( alias2 expression )=> alias2 expression -> ^( SELECTITEM expression alias2 ) )"; }
        }

    }


    protected internal int DFA53_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA53_4 = input.LA(1);

                   	 
                   	int index53_4 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred79_Sql()) ) { s = 7; }

                   	else if ( (synpred81_Sql()) ) { s = 8; }

                   	else if ( (synpred82_Sql()) ) { s = 9; }

                   	else if ( (synpred83_Sql()) ) { s = 10; }

                   	 
                   	input.Seek(index53_4);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 1 : 
                   	int LA53_5 = input.LA(1);

                   	 
                   	int index53_5 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred79_Sql()) ) { s = 7; }

                   	else if ( (synpred81_Sql()) ) { s = 8; }

                   	else if ( (synpred82_Sql()) ) { s = 9; }

                   	else if ( (synpred83_Sql()) ) { s = 10; }

                   	 
                   	input.Seek(index53_5);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 2 : 
                   	int LA53_6 = input.LA(1);

                   	 
                   	int index53_6 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred79_Sql()) ) { s = 7; }

                   	else if ( (synpred81_Sql()) ) { s = 8; }

                   	else if ( (synpred82_Sql()) ) { s = 9; }

                   	else if ( (synpred83_Sql()) ) { s = 10; }

                   	 
                   	input.Seek(index53_6);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae53 =
            new NoViableAltException(dfa.Description, 53, _s, input);
        dfa.Error(nvae53);
        throw nvae53;
    }
    const string DFA54_eotS =
        "\x11\uffff";
    const string DFA54_eofS =
        "\x01\x05\x10\uffff";
    const string DFA54_minS =
        "\x01\x25\x10\uffff";
    const string DFA54_maxS =
        "\x01\u0125\x10\uffff";
    const string DFA54_acceptS =
        "\x01\uffff\x01\x01\x03\uffff\x01\x02\x0b\uffff";
    const string DFA54_specialS =
        "\x11\uffff}>";
    static readonly string[] DFA54_transitionS = {
            "\x01\x01\x02\uffff\x01\x01\x01\uffff\x01\x01\x02\uffff\x01"+
            "\x01\x06\uffff\x01\x01\x07\uffff\x01\x05\x01\x01\x06\uffff\x01"+
            "\x01\x14\uffff\x01\x01\x04\uffff\x01\x05\x04\uffff\x04\x01\x03"+
            "\uffff\x01\x05\x01\x01\x03\uffff\x01\x05\x05\uffff\x01\x01\x0a"+
            "\uffff\x02\x05\x02\uffff\x02\x01\x06\uffff\x03\x01\x02\uffff"+
            "\x01\x01\x0c\uffff\x01\x05\x01\uffff\x01\x05\x02\uffff\x01\x01"+
            "\x09\uffff\x01\x01\x01\uffff\x02\x01\x01\uffff\x01\x01\x02\uffff"+
            "\x02\x01\x06\uffff\x01\x01\x01\uffff\x01\x01\x02\uffff\x01\x01"+
            "\x04\uffff\x01\x01\x07\uffff\x02\x01\x02\uffff\x01\x01\x07\uffff"+
            "\x01\x05\x03\uffff\x01\x01\x05\uffff\x01\x01\x06\uffff\x03\x01"+
            "\x21\uffff\x01\x05\x01\uffff\x02\x05\x0e\uffff\x04\x01",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA54_eot = DFA.UnpackEncodedString(DFA54_eotS);
    static readonly short[] DFA54_eof = DFA.UnpackEncodedString(DFA54_eofS);
    static readonly char[] DFA54_min = DFA.UnpackEncodedStringToUnsignedChars(DFA54_minS);
    static readonly char[] DFA54_max = DFA.UnpackEncodedStringToUnsignedChars(DFA54_maxS);
    static readonly short[] DFA54_accept = DFA.UnpackEncodedString(DFA54_acceptS);
    static readonly short[] DFA54_special = DFA.UnpackEncodedString(DFA54_specialS);
    static readonly short[][] DFA54_transition = DFA.UnpackEncodedStringArray(DFA54_transitionS);

    protected class DFA54 : DFA
    {
        public DFA54(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 54;
            this.eot = DFA54_eot;
            this.eof = DFA54_eof;
            this.min = DFA54_min;
            this.max = DFA54_max;
            this.accept = DFA54_accept;
            this.special = DFA54_special;
            this.transition = DFA54_transition;

        }

        override public string Description
        {
            get { return "631:44: ( alias1 )?"; }
        }

    }

    const string DFA55_eotS =
        "\x11\uffff";
    const string DFA55_eofS =
        "\x01\x05\x10\uffff";
    const string DFA55_minS =
        "\x01\x25\x10\uffff";
    const string DFA55_maxS =
        "\x01\u0125\x10\uffff";
    const string DFA55_acceptS =
        "\x01\uffff\x01\x01\x03\uffff\x01\x02\x0b\uffff";
    const string DFA55_specialS =
        "\x11\uffff}>";
    static readonly string[] DFA55_transitionS = {
            "\x01\x01\x02\uffff\x01\x01\x01\uffff\x01\x01\x02\uffff\x01"+
            "\x01\x06\uffff\x01\x01\x07\uffff\x01\x05\x01\x01\x06\uffff\x01"+
            "\x01\x14\uffff\x01\x01\x04\uffff\x01\x05\x04\uffff\x04\x01\x03"+
            "\uffff\x01\x05\x01\x01\x03\uffff\x01\x05\x05\uffff\x01\x01\x0a"+
            "\uffff\x02\x05\x02\uffff\x02\x01\x06\uffff\x03\x01\x02\uffff"+
            "\x01\x01\x0c\uffff\x01\x05\x01\uffff\x01\x05\x02\uffff\x01\x01"+
            "\x09\uffff\x01\x01\x01\uffff\x02\x01\x01\uffff\x01\x01\x02\uffff"+
            "\x02\x01\x06\uffff\x01\x01\x01\uffff\x01\x01\x02\uffff\x01\x01"+
            "\x04\uffff\x01\x01\x07\uffff\x02\x01\x02\uffff\x01\x01\x07\uffff"+
            "\x01\x05\x03\uffff\x01\x01\x05\uffff\x01\x01\x06\uffff\x03\x01"+
            "\x21\uffff\x01\x05\x01\uffff\x02\x05\x0e\uffff\x04\x01",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA55_eot = DFA.UnpackEncodedString(DFA55_eotS);
    static readonly short[] DFA55_eof = DFA.UnpackEncodedString(DFA55_eofS);
    static readonly char[] DFA55_min = DFA.UnpackEncodedStringToUnsignedChars(DFA55_minS);
    static readonly char[] DFA55_max = DFA.UnpackEncodedStringToUnsignedChars(DFA55_maxS);
    static readonly short[] DFA55_accept = DFA.UnpackEncodedString(DFA55_acceptS);
    static readonly short[] DFA55_special = DFA.UnpackEncodedString(DFA55_specialS);
    static readonly short[][] DFA55_transition = DFA.UnpackEncodedStringArray(DFA55_transitionS);

    protected class DFA55 : DFA
    {
        public DFA55(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 55;
            this.eot = DFA55_eot;
            this.eof = DFA55_eof;
            this.min = DFA55_min;
            this.max = DFA55_max;
            this.accept = DFA55_accept;
            this.special = DFA55_special;
            this.transition = DFA55_transition;

        }

        override public string Description
        {
            get { return "633:59: ( alias1 )?"; }
        }

    }

    const string DFA56_eotS =
        "\x11\uffff";
    const string DFA56_eofS =
        "\x01\x05\x10\uffff";
    const string DFA56_minS =
        "\x01\x25\x10\uffff";
    const string DFA56_maxS =
        "\x01\u0125\x10\uffff";
    const string DFA56_acceptS =
        "\x01\uffff\x01\x01\x03\uffff\x01\x02\x0b\uffff";
    const string DFA56_specialS =
        "\x11\uffff}>";
    static readonly string[] DFA56_transitionS = {
            "\x01\x01\x02\uffff\x01\x01\x01\uffff\x01\x01\x02\uffff\x01"+
            "\x01\x06\uffff\x01\x01\x07\uffff\x01\x05\x01\x01\x06\uffff\x01"+
            "\x01\x14\uffff\x01\x01\x04\uffff\x01\x05\x04\uffff\x04\x01\x03"+
            "\uffff\x01\x05\x01\x01\x03\uffff\x01\x05\x05\uffff\x01\x01\x0a"+
            "\uffff\x02\x05\x02\uffff\x02\x01\x06\uffff\x03\x01\x02\uffff"+
            "\x01\x01\x0c\uffff\x01\x05\x01\uffff\x01\x05\x02\uffff\x01\x01"+
            "\x09\uffff\x01\x01\x01\uffff\x02\x01\x01\uffff\x01\x01\x02\uffff"+
            "\x02\x01\x06\uffff\x01\x01\x01\uffff\x01\x01\x02\uffff\x01\x01"+
            "\x04\uffff\x01\x01\x07\uffff\x02\x01\x02\uffff\x01\x01\x07\uffff"+
            "\x01\x05\x03\uffff\x01\x01\x05\uffff\x01\x01\x06\uffff\x03\x01"+
            "\x21\uffff\x01\x05\x01\uffff\x02\x05\x0e\uffff\x04\x01",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA56_eot = DFA.UnpackEncodedString(DFA56_eotS);
    static readonly short[] DFA56_eof = DFA.UnpackEncodedString(DFA56_eofS);
    static readonly char[] DFA56_min = DFA.UnpackEncodedStringToUnsignedChars(DFA56_minS);
    static readonly char[] DFA56_max = DFA.UnpackEncodedStringToUnsignedChars(DFA56_maxS);
    static readonly short[] DFA56_accept = DFA.UnpackEncodedString(DFA56_acceptS);
    static readonly short[] DFA56_special = DFA.UnpackEncodedString(DFA56_specialS);
    static readonly short[][] DFA56_transition = DFA.UnpackEncodedStringArray(DFA56_transitionS);

    protected class DFA56 : DFA
    {
        public DFA56(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 56;
            this.eot = DFA56_eot;
            this.eof = DFA56_eof;
            this.min = DFA56_min;
            this.max = DFA56_max;
            this.accept = DFA56_accept;
            this.special = DFA56_special;
            this.transition = DFA56_transition;

        }

        override public string Description
        {
            get { return "637:26: ( alias1 )?"; }
        }

    }

    const string DFA57_eotS =
        "\x11\uffff";
    const string DFA57_eofS =
        "\x01\x05\x10\uffff";
    const string DFA57_minS =
        "\x01\x25\x10\uffff";
    const string DFA57_maxS =
        "\x01\u0125\x10\uffff";
    const string DFA57_acceptS =
        "\x01\uffff\x01\x01\x03\uffff\x01\x02\x0b\uffff";
    const string DFA57_specialS =
        "\x11\uffff}>";
    static readonly string[] DFA57_transitionS = {
            "\x01\x01\x02\uffff\x01\x01\x01\uffff\x01\x01\x02\uffff\x01"+
            "\x01\x06\uffff\x01\x01\x07\uffff\x01\x05\x01\x01\x06\uffff\x01"+
            "\x01\x14\uffff\x01\x01\x04\uffff\x01\x05\x04\uffff\x04\x01\x03"+
            "\uffff\x01\x05\x01\x01\x03\uffff\x01\x05\x05\uffff\x01\x01\x0a"+
            "\uffff\x02\x05\x02\uffff\x02\x01\x06\uffff\x03\x01\x02\uffff"+
            "\x01\x01\x0c\uffff\x01\x05\x01\uffff\x01\x05\x02\uffff\x01\x01"+
            "\x09\uffff\x01\x01\x01\uffff\x02\x01\x01\uffff\x01\x01\x02\uffff"+
            "\x02\x01\x06\uffff\x01\x01\x01\uffff\x01\x01\x02\uffff\x01\x01"+
            "\x04\uffff\x01\x01\x07\uffff\x02\x01\x02\uffff\x01\x01\x07\uffff"+
            "\x01\x05\x03\uffff\x01\x01\x05\uffff\x01\x01\x06\uffff\x03\x01"+
            "\x21\uffff\x01\x05\x01\uffff\x02\x05\x0e\uffff\x04\x01",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA57_eot = DFA.UnpackEncodedString(DFA57_eotS);
    static readonly short[] DFA57_eof = DFA.UnpackEncodedString(DFA57_eofS);
    static readonly char[] DFA57_min = DFA.UnpackEncodedStringToUnsignedChars(DFA57_minS);
    static readonly char[] DFA57_max = DFA.UnpackEncodedStringToUnsignedChars(DFA57_maxS);
    static readonly short[] DFA57_accept = DFA.UnpackEncodedString(DFA57_acceptS);
    static readonly short[] DFA57_special = DFA.UnpackEncodedString(DFA57_specialS);
    static readonly short[][] DFA57_transition = DFA.UnpackEncodedStringArray(DFA57_transitionS);

    protected class DFA57 : DFA
    {
        public DFA57(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 57;
            this.eot = DFA57_eot;
            this.eof = DFA57_eof;
            this.min = DFA57_min;
            this.max = DFA57_max;
            this.accept = DFA57_accept;
            this.special = DFA57_special;
            this.transition = DFA57_transition;

        }

        override public string Description
        {
            get { return "639:34: ( alias1 )?"; }
        }

    }

    const string DFA60_eotS =
        "\x0d\uffff";
    const string DFA60_eofS =
        "\x01\x01\x0c\uffff";
    const string DFA60_minS =
        "\x01\x3c\x0c\uffff";
    const string DFA60_maxS =
        "\x01\u0113\x0c\uffff";
    const string DFA60_acceptS =
        "\x01\uffff\x01\x02\x0a\uffff\x01\x01";
    const string DFA60_specialS =
        "\x0d\uffff}>";
    static readonly string[] DFA60_transitionS = {
            "\x01\x01\x21\uffff\x01\x01\x0b\uffff\x01\x01\x09\uffff\x01"+
            "\x01\x0b\uffff\x01\x01\x1d\uffff\x01\x01\x01\uffff\x01\x01\x3a"+
            "\uffff\x01\x01\x0c\uffff\x01\x01\x27\uffff\x01\x01\x01\uffff"+
            "\x01\x01\x01\x0c",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA60_eot = DFA.UnpackEncodedString(DFA60_eotS);
    static readonly short[] DFA60_eof = DFA.UnpackEncodedString(DFA60_eofS);
    static readonly char[] DFA60_min = DFA.UnpackEncodedStringToUnsignedChars(DFA60_minS);
    static readonly char[] DFA60_max = DFA.UnpackEncodedStringToUnsignedChars(DFA60_maxS);
    static readonly short[] DFA60_accept = DFA.UnpackEncodedString(DFA60_acceptS);
    static readonly short[] DFA60_special = DFA.UnpackEncodedString(DFA60_specialS);
    static readonly short[][] DFA60_transition = DFA.UnpackEncodedStringArray(DFA60_transitionS);

    protected class DFA60 : DFA
    {
        public DFA60(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 60;
            this.eot = DFA60_eot;
            this.eof = DFA60_eof;
            this.min = DFA60_min;
            this.max = DFA60_max;
            this.accept = DFA60_accept;
            this.special = DFA60_special;
            this.transition = DFA60_transition;

        }

        override public string Description
        {
            get { return "()* loopback of 645:24: ( COMMA tableSource )*"; }
        }

    }

    const string DFA65_eotS =
        "\u009b\uffff";
    const string DFA65_eofS =
        "\x04\uffff\x05\x24\u0092\uffff";
    const string DFA65_minS =
        "\x02\x28\x02\u0111\x05\x25\x01\u0117\x13\x00\x05\uffff\x01\x00"+
        "\x0e\uffff\x07\x00\x12\uffff\x01\x00\x01\uffff\x07\x00\x12\uffff"+
        "\x01\x00\x01\uffff\x07\x00\x12\uffff\x01\x00\x01\uffff\x04\x00\x05"+
        "\uffff\x01\x00\x0e\uffff\x01\x00";
    const string DFA65_maxS =
        "\x02\u0125\x02\u0111\x05\u0125\x01\u0117\x13\x00\x05\uffff\x01"+
        "\x00\x0e\uffff\x07\x00\x12\uffff\x01\x00\x01\uffff\x07\x00\x12\uffff"+
        "\x01\x00\x01\uffff\x07\x00\x12\uffff\x01\x00\x01\uffff\x04\x00\x05"+
        "\uffff\x01\x00\x0e\uffff\x01\x00";
    const string DFA65_acceptS =
        "\x1d\uffff\x01\x01\x06\uffff\x01\x02\x76\uffff";
    const string DFA65_specialS =
        "\x0a\uffff\x01\x00\x01\x01\x01\x02\x01\x03\x01\x04\x01\x05\x01"+
        "\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x0d\x01"+
        "\x0e\x01\x0f\x01\x10\x01\x11\x01\x12\x05\uffff\x01\x13\x0e\uffff"+
        "\x01\x14\x01\x15\x01\x16\x01\x17\x01\x18\x01\x19\x01\x1a\x12\uffff"+
        "\x01\x1b\x01\uffff\x01\x1c\x01\x1d\x01\x1e\x01\x1f\x01\x20\x01\x21"+
        "\x01\x22\x12\uffff\x01\x23\x01\uffff\x01\x24\x01\x25\x01\x26\x01"+
        "\x27\x01\x28\x01\x29\x01\x2a\x12\uffff\x01\x2b\x01\uffff\x01\x2c"+
        "\x01\x2d\x01\x2e\x01\x2f\x05\uffff\x01\x30\x0e\uffff\x01\x31}>";
    static readonly string[] DFA65_transitionS = {
            "\x01\x07\x01\uffff\x01\x07\x02\uffff\x01\x07\x06\uffff\x01"+
            "\x07\x08\uffff\x01\x07\x06\uffff\x01\x07\x14\uffff\x01\x07\x09"+
            "\uffff\x04\x07\x04\uffff\x01\x07\x09\uffff\x01\x07\x04\uffff"+
            "\x01\x05\x09\uffff\x02\x07\x02\uffff\x01\x02\x03\uffff\x03\x07"+
            "\x02\uffff\x01\x07\x11\uffff\x01\x07\x09\uffff\x01\x07\x01\uffff"+
            "\x02\x07\x01\uffff\x01\x07\x02\uffff\x02\x07\x05\uffff\x01\x03"+
            "\x01\x07\x01\uffff\x01\x07\x01\uffff\x01\x06\x01\x07\x04\uffff"+
            "\x01\x07\x07\uffff\x02\x07\x02\uffff\x01\x07\x0b\uffff\x01\x07"+
            "\x05\uffff\x01\x07\x06\uffff\x03\x07\x22\uffff\x01\x01\x04\uffff"+
            "\x01\x08\x01\x09\x0c\uffff\x02\x04",
            "\x01\x10\x01\uffff\x01\x10\x02\uffff\x01\x10\x06\uffff\x01"+
            "\x10\x08\uffff\x01\x10\x06\uffff\x01\x10\x14\uffff\x01\x10\x09"+
            "\uffff\x04\x10\x04\uffff\x01\x10\x09\uffff\x01\x10\x04\uffff"+
            "\x01\x0e\x09\uffff\x02\x10\x02\uffff\x01\x0b\x03\uffff\x03\x10"+
            "\x02\uffff\x01\x10\x11\uffff\x01\x10\x09\uffff\x01\x10\x01\uffff"+
            "\x02\x10\x01\uffff\x01\x10\x02\uffff\x02\x10\x05\uffff\x01\x0c"+
            "\x01\x10\x01\uffff\x01\x10\x01\uffff\x01\x0f\x01\x10\x03\uffff"+
            "\x01\x13\x01\x10\x07\uffff\x02\x10\x02\uffff\x01\x10\x0b\uffff"+
            "\x01\x10\x05\uffff\x01\x10\x06\uffff\x03\x10\x22\uffff\x01\x0a"+
            "\x04\uffff\x01\x11\x01\x12\x0c\uffff\x02\x0d",
            "\x01\x14",
            "\x01\x15",
            "\x01\x18\x02\uffff\x01\x22\x01\uffff\x01\x22\x02\uffff\x01"+
            "\x22\x06\uffff\x01\x22\x07\uffff\x01\x24\x01\x22\x05\uffff\x01"+
            "\x1d\x01\x22\x14\uffff\x01\x22\x04\uffff\x01\x24\x04\uffff\x04"+
            "\x22\x03\uffff\x01\x24\x01\x22\x04\uffff\x01\x1d\x03\uffff\x01"+
            "\x24\x01\x1b\x08\uffff\x01\x1d\x01\uffff\x01\x24\x02\uffff\x01"+
            "\x1d\x02\x22\x02\uffff\x01\x1d\x03\uffff\x01\x1b\x01\x22\x01"+
            "\x1b\x02\uffff\x01\x22\x06\uffff\x01\x24\x05\uffff\x01\x24\x01"+
            "\uffff\x01\x24\x02\uffff\x01\x22\x09\uffff\x01\x22\x01\uffff"+
            "\x02\x22\x01\uffff\x01\x22\x02\uffff\x01\x1b\x01\x22\x05\uffff"+
            "\x01\x1d\x01\x22\x01\uffff\x01\x22\x02\uffff\x01\x22\x04\uffff"+
            "\x01\x22\x07\uffff\x02\x22\x02\uffff\x01\x22\x07\uffff\x01\x24"+
            "\x03\uffff\x01\x22\x05\uffff\x01\x22\x02\uffff\x01\x24\x01\uffff"+
            "\x01\x1c\x01\uffff\x03\x22\x21\uffff\x01\x24\x01\x17\x02\x24"+
            "\x0d\uffff\x01\x16\x02\x1a\x02\x19",
            "\x01\x33\x02\uffff\x01\x4a\x01\uffff\x01\x4a\x02\uffff\x01"+
            "\x4a\x06\uffff\x01\x4a\x07\uffff\x01\x24\x01\x4a\x05\uffff\x01"+
            "\x1d\x01\x4a\x14\uffff\x01\x4a\x04\uffff\x01\x24\x04\uffff\x04"+
            "\x4a\x03\uffff\x01\x24\x01\x4a\x04\uffff\x01\x1d\x03\uffff\x01"+
            "\x24\x01\x36\x08\uffff\x01\x1d\x01\uffff\x01\x24\x02\uffff\x01"+
            "\x1d\x02\x4a\x02\uffff\x01\x1d\x03\uffff\x01\x36\x01\x4a\x01"+
            "\x36\x02\uffff\x01\x4a\x06\uffff\x01\x24\x05\uffff\x01\x24\x01"+
            "\uffff\x01\x24\x02\uffff\x01\x4a\x09\uffff\x01\x4a\x01\uffff"+
            "\x02\x4a\x01\uffff\x01\x4a\x02\uffff\x01\x36\x01\x4a\x05\uffff"+
            "\x01\x1d\x01\x4a\x01\uffff\x01\x4a\x02\uffff\x01\x4a\x04\uffff"+
            "\x01\x4a\x07\uffff\x02\x4a\x02\uffff\x01\x4a\x07\uffff\x01\x24"+
            "\x03\uffff\x01\x4a\x05\uffff\x01\x4a\x02\uffff\x01\x24\x01\uffff"+
            "\x01\x37\x01\uffff\x03\x4a\x21\uffff\x01\x24\x01\x32\x02\x24"+
            "\x0d\uffff\x01\x31\x02\x35\x02\x34",
            "\x01\x4e\x02\uffff\x01\x65\x01\uffff\x01\x65\x02\uffff\x01"+
            "\x65\x06\uffff\x01\x65\x07\uffff\x01\x24\x01\x65\x05\uffff\x01"+
            "\x1d\x01\x65\x14\uffff\x01\x65\x04\uffff\x01\x24\x04\uffff\x04"+
            "\x65\x03\uffff\x01\x24\x01\x65\x04\uffff\x01\x1d\x03\uffff\x01"+
            "\x24\x01\x51\x08\uffff\x01\x1d\x01\uffff\x01\x24\x02\uffff\x01"+
            "\x1d\x02\x65\x02\uffff\x01\x1d\x03\uffff\x01\x51\x01\x65\x01"+
            "\x51\x02\uffff\x01\x65\x06\uffff\x01\x24\x05\uffff\x01\x24\x01"+
            "\uffff\x01\x24\x02\uffff\x01\x65\x09\uffff\x01\x65\x01\uffff"+
            "\x02\x65\x01\uffff\x01\x65\x02\uffff\x01\x51\x01\x65\x05\uffff"+
            "\x01\x1d\x01\x65\x01\uffff\x01\x65\x02\uffff\x01\x65\x04\uffff"+
            "\x01\x65\x07\uffff\x02\x65\x02\uffff\x01\x65\x07\uffff\x01\x24"+
            "\x03\uffff\x01\x65\x05\uffff\x01\x65\x02\uffff\x01\x24\x01\uffff"+
            "\x01\x52\x01\uffff\x03\x65\x21\uffff\x01\x24\x01\x4d\x02\x24"+
            "\x0d\uffff\x01\x4c\x02\x50\x02\x4f",
            "\x01\x69\x02\uffff\x01\u0080\x01\uffff\x01\u0080\x02\uffff"+
            "\x01\u0080\x06\uffff\x01\u0080\x07\uffff\x01\x24\x01\u0080\x05"+
            "\uffff\x01\x1d\x01\u0080\x14\uffff\x01\u0080\x04\uffff\x01\x24"+
            "\x04\uffff\x04\u0080\x03\uffff\x01\x24\x01\u0080\x04\uffff\x01"+
            "\x1d\x03\uffff\x01\x24\x01\x6c\x08\uffff\x01\x1d\x01\uffff\x01"+
            "\x24\x02\uffff\x01\x1d\x02\u0080\x02\uffff\x01\x1d\x03\uffff"+
            "\x01\x6c\x01\u0080\x01\x6c\x02\uffff\x01\u0080\x06\uffff\x01"+
            "\x24\x05\uffff\x01\x24\x01\uffff\x01\x24\x02\uffff\x01\u0080"+
            "\x09\uffff\x01\u0080\x01\uffff\x02\u0080\x01\uffff\x01\u0080"+
            "\x02\uffff\x01\x6c\x01\u0080\x05\uffff\x01\x1d\x01\u0080\x01"+
            "\uffff\x01\u0080\x02\uffff\x01\u0080\x04\uffff\x01\u0080\x07"+
            "\uffff\x02\u0080\x02\uffff\x01\u0080\x07\uffff\x01\x24\x03\uffff"+
            "\x01\u0080\x05\uffff\x01\u0080\x02\uffff\x01\x24\x01\uffff\x01"+
            "\x6d\x01\uffff\x03\u0080\x21\uffff\x01\x24\x01\x68\x02\x24\x0d"+
            "\uffff\x01\x67\x02\x6b\x02\x6a",
            "\x01\u0082\x02\uffff\x01\u008b\x01\uffff\x01\u008b\x02\uffff"+
            "\x01\u008b\x06\uffff\x01\u008b\x07\uffff\x01\x24\x01\u008b\x05"+
            "\uffff\x01\x1d\x01\u008b\x14\uffff\x01\u008b\x04\uffff\x01\x24"+
            "\x04\uffff\x04\u008b\x03\uffff\x01\x24\x01\u008b\x04\uffff\x01"+
            "\x1d\x03\uffff\x01\x24\x01\u0085\x08\uffff\x01\x1d\x01\uffff"+
            "\x01\x24\x02\uffff\x01\x1d\x02\u008b\x02\uffff\x01\x1d\x03\uffff"+
            "\x01\u0085\x01\u008b\x01\u0085\x02\uffff\x01\u008b\x06\uffff"+
            "\x01\x24\x05\uffff\x01\x24\x01\uffff\x01\x24\x02\uffff\x01\u008b"+
            "\x09\uffff\x01\u008b\x01\uffff\x02\u008b\x01\uffff\x01\u008b"+
            "\x02\uffff\x01\u0085\x01\u008b\x05\uffff\x01\x1d\x01\u008b\x01"+
            "\uffff\x01\u008b\x02\uffff\x01\u008b\x04\uffff\x01\u008b\x07"+
            "\uffff\x02\u008b\x02\uffff\x01\u008b\x07\uffff\x01\x24\x03\uffff"+
            "\x01\u008b\x05\uffff\x01\u008b\x02\uffff\x01\x24\x03\uffff\x03"+
            "\u008b\x21\uffff\x01\x24\x01\uffff\x02\x24\x0e\uffff\x02\u0084"+
            "\x02\u0083",
            "\x01\u009a",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff"
    };

    static readonly short[] DFA65_eot = DFA.UnpackEncodedString(DFA65_eotS);
    static readonly short[] DFA65_eof = DFA.UnpackEncodedString(DFA65_eofS);
    static readonly char[] DFA65_min = DFA.UnpackEncodedStringToUnsignedChars(DFA65_minS);
    static readonly char[] DFA65_max = DFA.UnpackEncodedStringToUnsignedChars(DFA65_maxS);
    static readonly short[] DFA65_accept = DFA.UnpackEncodedString(DFA65_acceptS);
    static readonly short[] DFA65_special = DFA.UnpackEncodedString(DFA65_specialS);
    static readonly short[][] DFA65_transition = DFA.UnpackEncodedStringArray(DFA65_transitionS);

    protected class DFA65 : DFA
    {
        public DFA65(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 65;
            this.eot = DFA65_eot;
            this.eof = DFA65_eof;
            this.min = DFA65_min;
            this.max = DFA65_max;
            this.accept = DFA65_accept;
            this.special = DFA65_special;
            this.transition = DFA65_transition;

        }

        override public string Description
        {
            get { return "665:1: tableSource : ( joinedTables -> ^( joinedTables ) | subTableSource );"; }
        }

    }


    protected internal int DFA65_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA65_10 = input.LA(1);

                   	 
                   	int index65_10 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_10);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 1 : 
                   	int LA65_11 = input.LA(1);

                   	 
                   	int index65_11 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_11);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 2 : 
                   	int LA65_12 = input.LA(1);

                   	 
                   	int index65_12 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_12);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 3 : 
                   	int LA65_13 = input.LA(1);

                   	 
                   	int index65_13 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_13);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 4 : 
                   	int LA65_14 = input.LA(1);

                   	 
                   	int index65_14 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_14);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 5 : 
                   	int LA65_15 = input.LA(1);

                   	 
                   	int index65_15 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_15);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 6 : 
                   	int LA65_16 = input.LA(1);

                   	 
                   	int index65_16 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_16);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 7 : 
                   	int LA65_17 = input.LA(1);

                   	 
                   	int index65_17 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_17);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 8 : 
                   	int LA65_18 = input.LA(1);

                   	 
                   	int index65_18 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_18);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 9 : 
                   	int LA65_19 = input.LA(1);

                   	 
                   	int index65_19 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_19);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 10 : 
                   	int LA65_20 = input.LA(1);

                   	 
                   	int index65_20 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_20);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 11 : 
                   	int LA65_21 = input.LA(1);

                   	 
                   	int index65_21 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_21);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 12 : 
                   	int LA65_22 = input.LA(1);

                   	 
                   	int index65_22 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_22);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 13 : 
                   	int LA65_23 = input.LA(1);

                   	 
                   	int index65_23 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_23);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 14 : 
                   	int LA65_24 = input.LA(1);

                   	 
                   	int index65_24 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_24);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 15 : 
                   	int LA65_25 = input.LA(1);

                   	 
                   	int index65_25 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_25);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 16 : 
                   	int LA65_26 = input.LA(1);

                   	 
                   	int index65_26 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_26);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 17 : 
                   	int LA65_27 = input.LA(1);

                   	 
                   	int index65_27 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_27);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 18 : 
                   	int LA65_28 = input.LA(1);

                   	 
                   	int index65_28 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_28);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 19 : 
                   	int LA65_34 = input.LA(1);

                   	 
                   	int index65_34 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_34);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 20 : 
                   	int LA65_49 = input.LA(1);

                   	 
                   	int index65_49 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_49);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 21 : 
                   	int LA65_50 = input.LA(1);

                   	 
                   	int index65_50 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_50);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 22 : 
                   	int LA65_51 = input.LA(1);

                   	 
                   	int index65_51 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_51);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 23 : 
                   	int LA65_52 = input.LA(1);

                   	 
                   	int index65_52 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_52);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 24 : 
                   	int LA65_53 = input.LA(1);

                   	 
                   	int index65_53 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_53);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 25 : 
                   	int LA65_54 = input.LA(1);

                   	 
                   	int index65_54 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_54);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 26 : 
                   	int LA65_55 = input.LA(1);

                   	 
                   	int index65_55 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_55);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 27 : 
                   	int LA65_74 = input.LA(1);

                   	 
                   	int index65_74 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_74);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 28 : 
                   	int LA65_76 = input.LA(1);

                   	 
                   	int index65_76 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_76);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 29 : 
                   	int LA65_77 = input.LA(1);

                   	 
                   	int index65_77 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_77);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 30 : 
                   	int LA65_78 = input.LA(1);

                   	 
                   	int index65_78 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_78);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 31 : 
                   	int LA65_79 = input.LA(1);

                   	 
                   	int index65_79 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_79);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 32 : 
                   	int LA65_80 = input.LA(1);

                   	 
                   	int index65_80 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_80);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 33 : 
                   	int LA65_81 = input.LA(1);

                   	 
                   	int index65_81 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_81);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 34 : 
                   	int LA65_82 = input.LA(1);

                   	 
                   	int index65_82 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_82);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 35 : 
                   	int LA65_101 = input.LA(1);

                   	 
                   	int index65_101 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_101);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 36 : 
                   	int LA65_103 = input.LA(1);

                   	 
                   	int index65_103 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_103);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 37 : 
                   	int LA65_104 = input.LA(1);

                   	 
                   	int index65_104 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_104);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 38 : 
                   	int LA65_105 = input.LA(1);

                   	 
                   	int index65_105 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_105);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 39 : 
                   	int LA65_106 = input.LA(1);

                   	 
                   	int index65_106 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_106);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 40 : 
                   	int LA65_107 = input.LA(1);

                   	 
                   	int index65_107 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_107);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 41 : 
                   	int LA65_108 = input.LA(1);

                   	 
                   	int index65_108 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_108);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 42 : 
                   	int LA65_109 = input.LA(1);

                   	 
                   	int index65_109 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_109);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 43 : 
                   	int LA65_128 = input.LA(1);

                   	 
                   	int index65_128 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_128);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 44 : 
                   	int LA65_130 = input.LA(1);

                   	 
                   	int index65_130 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_130);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 45 : 
                   	int LA65_131 = input.LA(1);

                   	 
                   	int index65_131 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_131);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 46 : 
                   	int LA65_132 = input.LA(1);

                   	 
                   	int index65_132 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_132);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 47 : 
                   	int LA65_133 = input.LA(1);

                   	 
                   	int index65_133 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_133);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 48 : 
                   	int LA65_139 = input.LA(1);

                   	 
                   	int index65_139 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_139);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 49 : 
                   	int LA65_154 = input.LA(1);

                   	 
                   	int index65_154 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred101_Sql()) ) { s = 29; }

                   	else if ( (true) ) { s = 36; }

                   	 
                   	input.Seek(index65_154);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae65 =
            new NoViableAltException(dfa.Description, 65, _s, input);
        dfa.Error(nvae65);
        throw nvae65;
    }
    const string DFA74_eotS =
        "\x76\uffff";
    const string DFA74_eofS =
        "\x04\uffff\x04\x0b\x6e\uffff";
    const string DFA74_minS =
        "\x01\x28\x03\uffff\x04\x25\x02\uffff\x01\x00\x05\uffff\x01\x00"+
        "\x14\uffff\x01\x00\x05\uffff\x01\x00\x14\uffff\x01\x00\x05\uffff"+
        "\x01\x00\x14\uffff\x01\x00\x05\uffff\x01\x00\x14\uffff";
    const string DFA74_maxS =
        "\x01\u0125\x03\uffff\x04\u0125\x02\uffff\x01\x00\x05\uffff\x01"+
        "\x00\x14\uffff\x01\x00\x05\uffff\x01\x00\x14\uffff\x01\x00\x05\uffff"+
        "\x01\x00\x14\uffff\x01\x00\x05\uffff\x01\x00\x14\uffff";
    const string DFA74_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x05\uffff\x01\x04\x01\x05\x01\uffff"+
        "\x01\x03\x6a\uffff";
    const string DFA74_specialS =
        "\x0a\uffff\x01\x00\x05\uffff\x01\x01\x14\uffff\x01\x02\x05\uffff"+
        "\x01\x03\x14\uffff\x01\x04\x05\uffff\x01\x05\x14\uffff\x01\x06\x05"+
        "\uffff\x01\x07\x14\uffff}>";
    static readonly string[] DFA74_transitionS = {
            "\x01\x07\x01\uffff\x01\x07\x02\uffff\x01\x07\x06\uffff\x01"+
            "\x07\x08\uffff\x01\x07\x06\uffff\x01\x07\x14\uffff\x01\x07\x09"+
            "\uffff\x04\x07\x04\uffff\x01\x07\x09\uffff\x01\x07\x04\uffff"+
            "\x01\x05\x09\uffff\x02\x07\x02\uffff\x01\x02\x03\uffff\x03\x07"+
            "\x02\uffff\x01\x07\x11\uffff\x01\x07\x09\uffff\x01\x07\x01\uffff"+
            "\x02\x07\x01\uffff\x01\x07\x02\uffff\x02\x07\x05\uffff\x01\x02"+
            "\x01\x07\x01\uffff\x01\x07\x01\uffff\x01\x06\x01\x07\x04\uffff"+
            "\x01\x07\x07\uffff\x02\x07\x02\uffff\x01\x07\x0b\uffff\x01\x07"+
            "\x05\uffff\x01\x07\x06\uffff\x03\x07\x22\uffff\x01\x01\x04\uffff"+
            "\x01\x08\x01\x09\x0c\uffff\x02\x04",
            "",
            "",
            "",
            "\x01\x0b\x02\uffff\x01\x0b\x01\uffff\x01\x0b\x02\uffff\x01"+
            "\x0b\x06\uffff\x01\x0b\x07\uffff\x02\x0b\x05\uffff\x02\x0b\x14"+
            "\uffff\x01\x0b\x04\uffff\x01\x0b\x04\uffff\x04\x0b\x03\uffff"+
            "\x02\x0b\x04\uffff\x01\x0b\x03\uffff\x02\x0b\x08\uffff\x01\x0b"+
            "\x01\uffff\x01\x0b\x02\uffff\x03\x0b\x02\uffff\x01\x0b\x03\uffff"+
            "\x03\x0b\x02\uffff\x01\x0b\x06\uffff\x01\x0b\x05\uffff\x01\x0b"+
            "\x01\uffff\x01\x0b\x02\uffff\x01\x0b\x09\uffff\x01\x0b\x01\uffff"+
            "\x02\x0b\x01\uffff\x01\x0b\x02\uffff\x02\x0b\x05\uffff\x02\x0b"+
            "\x01\uffff\x01\x0b\x02\uffff\x01\x0b\x04\uffff\x01\x0b\x07\uffff"+
            "\x02\x0b\x02\uffff\x01\x0b\x07\uffff\x01\x0b\x03\uffff\x01\x0b"+
            "\x05\uffff\x01\x0b\x02\uffff\x01\x0b\x01\uffff\x01\x0b\x01\uffff"+
            "\x03\x0b\x21\uffff\x01\x0b\x01\x10\x02\x0b\x0d\uffff\x01\x0a"+
            "\x04\x0b",
            "\x01\x0b\x02\uffff\x01\x0b\x01\uffff\x01\x0b\x02\uffff\x01"+
            "\x0b\x06\uffff\x01\x0b\x07\uffff\x02\x0b\x05\uffff\x02\x0b\x14"+
            "\uffff\x01\x0b\x04\uffff\x01\x0b\x04\uffff\x04\x0b\x03\uffff"+
            "\x02\x0b\x04\uffff\x01\x0b\x03\uffff\x02\x0b\x08\uffff\x01\x0b"+
            "\x01\uffff\x01\x0b\x02\uffff\x03\x0b\x02\uffff\x01\x0b\x03\uffff"+
            "\x03\x0b\x02\uffff\x01\x0b\x06\uffff\x01\x0b\x05\uffff\x01\x0b"+
            "\x01\uffff\x01\x0b\x02\uffff\x01\x0b\x09\uffff\x01\x0b\x01\uffff"+
            "\x02\x0b\x01\uffff\x01\x0b\x02\uffff\x02\x0b\x05\uffff\x02\x0b"+
            "\x01\uffff\x01\x0b\x02\uffff\x01\x0b\x04\uffff\x01\x0b\x07\uffff"+
            "\x02\x0b\x02\uffff\x01\x0b\x07\uffff\x01\x0b\x03\uffff\x01\x0b"+
            "\x05\uffff\x01\x0b\x02\uffff\x01\x0b\x01\uffff\x01\x0b\x01\uffff"+
            "\x03\x0b\x21\uffff\x01\x0b\x01\x2b\x02\x0b\x0d\uffff\x01\x25"+
            "\x04\x0b",
            "\x01\x0b\x02\uffff\x01\x0b\x01\uffff\x01\x0b\x02\uffff\x01"+
            "\x0b\x06\uffff\x01\x0b\x07\uffff\x02\x0b\x05\uffff\x02\x0b\x14"+
            "\uffff\x01\x0b\x04\uffff\x01\x0b\x04\uffff\x04\x0b\x03\uffff"+
            "\x02\x0b\x04\uffff\x01\x0b\x03\uffff\x02\x0b\x08\uffff\x01\x0b"+
            "\x01\uffff\x01\x0b\x02\uffff\x03\x0b\x02\uffff\x01\x0b\x03\uffff"+
            "\x03\x0b\x02\uffff\x01\x0b\x06\uffff\x01\x0b\x05\uffff\x01\x0b"+
            "\x01\uffff\x01\x0b\x02\uffff\x01\x0b\x09\uffff\x01\x0b\x01\uffff"+
            "\x02\x0b\x01\uffff\x01\x0b\x02\uffff\x02\x0b\x05\uffff\x02\x0b"+
            "\x01\uffff\x01\x0b\x02\uffff\x01\x0b\x04\uffff\x01\x0b\x07\uffff"+
            "\x02\x0b\x02\uffff\x01\x0b\x07\uffff\x01\x0b\x03\uffff\x01\x0b"+
            "\x05\uffff\x01\x0b\x02\uffff\x01\x0b\x01\uffff\x01\x0b\x01\uffff"+
            "\x03\x0b\x21\uffff\x01\x0b\x01\x46\x02\x0b\x0d\uffff\x01\x40"+
            "\x04\x0b",
            "\x01\x0b\x02\uffff\x01\x0b\x01\uffff\x01\x0b\x02\uffff\x01"+
            "\x0b\x06\uffff\x01\x0b\x07\uffff\x02\x0b\x05\uffff\x02\x0b\x14"+
            "\uffff\x01\x0b\x04\uffff\x01\x0b\x04\uffff\x04\x0b\x03\uffff"+
            "\x02\x0b\x04\uffff\x01\x0b\x03\uffff\x02\x0b\x08\uffff\x01\x0b"+
            "\x01\uffff\x01\x0b\x02\uffff\x03\x0b\x02\uffff\x01\x0b\x03\uffff"+
            "\x03\x0b\x02\uffff\x01\x0b\x06\uffff\x01\x0b\x05\uffff\x01\x0b"+
            "\x01\uffff\x01\x0b\x02\uffff\x01\x0b\x09\uffff\x01\x0b\x01\uffff"+
            "\x02\x0b\x01\uffff\x01\x0b\x02\uffff\x02\x0b\x05\uffff\x02\x0b"+
            "\x01\uffff\x01\x0b\x02\uffff\x01\x0b\x04\uffff\x01\x0b\x07\uffff"+
            "\x02\x0b\x02\uffff\x01\x0b\x07\uffff\x01\x0b\x03\uffff\x01\x0b"+
            "\x05\uffff\x01\x0b\x02\uffff\x01\x0b\x01\uffff\x01\x0b\x01\uffff"+
            "\x03\x0b\x21\uffff\x01\x0b\x01\x61\x02\x0b\x0d\uffff\x01\x5b"+
            "\x04\x0b",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA74_eot = DFA.UnpackEncodedString(DFA74_eotS);
    static readonly short[] DFA74_eof = DFA.UnpackEncodedString(DFA74_eofS);
    static readonly char[] DFA74_min = DFA.UnpackEncodedStringToUnsignedChars(DFA74_minS);
    static readonly char[] DFA74_max = DFA.UnpackEncodedStringToUnsignedChars(DFA74_maxS);
    static readonly short[] DFA74_accept = DFA.UnpackEncodedString(DFA74_acceptS);
    static readonly short[] DFA74_special = DFA.UnpackEncodedString(DFA74_specialS);
    static readonly short[][] DFA74_transition = DFA.UnpackEncodedStringArray(DFA74_transitionS);

    protected class DFA74 : DFA
    {
        public DFA74(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 74;
            this.eot = DFA74_eot;
            this.eof = DFA74_eof;
            this.min = DFA74_min;
            this.max = DFA74_max;
            this.accept = DFA74_accept;
            this.special = DFA74_special;
            this.transition = DFA74_transition;

        }

        override public string Description
        {
            get { return "674:5: ( LPAREN ( ( joinedTables )=> joinedTables RPAREN -> ^( joinedTables ) | ( queryExpression )=> queryExpression RPAREN alias1 -> ^( TABLE queryExpression alias1 ) ) | function ( alias1 )? -> ^( TABLEFUNCTION function ( alias1 )? ) | dbObject ( alias1 )? ( ( WITH )? LPAREN tableHint ( COMMA tableHint )* RPAREN )? -> ^( TABLE dbObject ( alias1 )? ) | Variable ( alias1 )? -> ^( TABLE Variable ( alias1 )? ) | ( COLON COLON function ( alias1 )? ) -> ^( TABLEFUNCTION function ( alias1 )? ) )"; }
        }

    }


    protected internal int DFA74_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA74_10 = input.LA(1);

                   	 
                   	int index74_10 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred106_Sql()) ) { s = 2; }

                   	else if ( (synpred111_Sql()) ) { s = 11; }

                   	 
                   	input.Seek(index74_10);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 1 : 
                   	int LA74_16 = input.LA(1);

                   	 
                   	int index74_16 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred106_Sql()) ) { s = 2; }

                   	else if ( (synpred111_Sql()) ) { s = 11; }

                   	 
                   	input.Seek(index74_16);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 2 : 
                   	int LA74_37 = input.LA(1);

                   	 
                   	int index74_37 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred106_Sql()) ) { s = 2; }

                   	else if ( (synpred111_Sql()) ) { s = 11; }

                   	 
                   	input.Seek(index74_37);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 3 : 
                   	int LA74_43 = input.LA(1);

                   	 
                   	int index74_43 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred106_Sql()) ) { s = 2; }

                   	else if ( (synpred111_Sql()) ) { s = 11; }

                   	 
                   	input.Seek(index74_43);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 4 : 
                   	int LA74_64 = input.LA(1);

                   	 
                   	int index74_64 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred106_Sql()) ) { s = 2; }

                   	else if ( (synpred111_Sql()) ) { s = 11; }

                   	 
                   	input.Seek(index74_64);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 5 : 
                   	int LA74_70 = input.LA(1);

                   	 
                   	int index74_70 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred106_Sql()) ) { s = 2; }

                   	else if ( (synpred111_Sql()) ) { s = 11; }

                   	 
                   	input.Seek(index74_70);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 6 : 
                   	int LA74_91 = input.LA(1);

                   	 
                   	int index74_91 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred106_Sql()) ) { s = 2; }

                   	else if ( (synpred111_Sql()) ) { s = 11; }

                   	 
                   	input.Seek(index74_91);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 7 : 
                   	int LA74_97 = input.LA(1);

                   	 
                   	int index74_97 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred106_Sql()) ) { s = 2; }

                   	else if ( (synpred111_Sql()) ) { s = 11; }

                   	 
                   	input.Seek(index74_97);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae74 =
            new NoViableAltException(dfa.Description, 74, _s, input);
        dfa.Error(nvae74);
        throw nvae74;
    }
    const string DFA66_eotS =
        "\x15\uffff";
    const string DFA66_eofS =
        "\x15\uffff";
    const string DFA66_minS =
        "\x02\x28\x09\uffff\x01\x00\x08\uffff\x01\x00";
    const string DFA66_maxS =
        "\x02\u0125\x09\uffff\x01\x00\x08\uffff\x01\x00";
    const string DFA66_acceptS =
        "\x02\uffff\x08\x01\x01\x02\x01\uffff\x08\x01\x01\uffff";
    const string DFA66_specialS =
        "\x01\x00\x01\x01\x09\uffff\x01\x02\x08\uffff\x01\x03}>";
    static readonly string[] DFA66_transitionS = {
            "\x01\x07\x01\uffff\x01\x07\x02\uffff\x01\x07\x06\uffff\x01"+
            "\x07\x08\uffff\x01\x07\x06\uffff\x01\x07\x14\uffff\x01\x07\x09"+
            "\uffff\x04\x07\x04\uffff\x01\x07\x09\uffff\x01\x07\x04\uffff"+
            "\x01\x05\x09\uffff\x02\x07\x02\uffff\x01\x02\x03\uffff\x03\x07"+
            "\x02\uffff\x01\x07\x11\uffff\x01\x07\x09\uffff\x01\x07\x01\uffff"+
            "\x02\x07\x01\uffff\x01\x07\x02\uffff\x02\x07\x05\uffff\x01\x03"+
            "\x01\x07\x01\uffff\x01\x07\x01\uffff\x01\x06\x01\x07\x03\uffff"+
            "\x01\x0a\x01\x07\x07\uffff\x02\x07\x02\uffff\x01\x07\x0b\uffff"+
            "\x01\x07\x05\uffff\x01\x07\x06\uffff\x03\x07\x22\uffff\x01\x01"+
            "\x04\uffff\x01\x08\x01\x09\x0c\uffff\x02\x04",
            "\x01\x11\x01\uffff\x01\x11\x02\uffff\x01\x11\x06\uffff\x01"+
            "\x11\x08\uffff\x01\x11\x06\uffff\x01\x11\x14\uffff\x01\x11\x09"+
            "\uffff\x04\x11\x04\uffff\x01\x11\x09\uffff\x01\x11\x04\uffff"+
            "\x01\x0f\x09\uffff\x02\x11\x02\uffff\x01\x0c\x03\uffff\x03\x11"+
            "\x02\uffff\x01\x11\x11\uffff\x01\x11\x09\uffff\x01\x11\x01\uffff"+
            "\x02\x11\x01\uffff\x01\x11\x02\uffff\x02\x11\x05\uffff\x01\x0d"+
            "\x01\x11\x01\uffff\x01\x11\x01\uffff\x01\x10\x01\x11\x03\uffff"+
            "\x01\x14\x01\x11\x07\uffff\x02\x11\x02\uffff\x01\x11\x0b\uffff"+
            "\x01\x11\x05\uffff\x01\x11\x06\uffff\x03\x11\x22\uffff\x01\x0b"+
            "\x04\uffff\x01\x12\x01\x13\x0c\uffff\x02\x0e",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff"
    };

    static readonly short[] DFA66_eot = DFA.UnpackEncodedString(DFA66_eotS);
    static readonly short[] DFA66_eof = DFA.UnpackEncodedString(DFA66_eofS);
    static readonly char[] DFA66_min = DFA.UnpackEncodedStringToUnsignedChars(DFA66_minS);
    static readonly char[] DFA66_max = DFA.UnpackEncodedStringToUnsignedChars(DFA66_maxS);
    static readonly short[] DFA66_accept = DFA.UnpackEncodedString(DFA66_acceptS);
    static readonly short[] DFA66_special = DFA.UnpackEncodedString(DFA66_specialS);
    static readonly short[][] DFA66_transition = DFA.UnpackEncodedStringArray(DFA66_transitionS);

    protected class DFA66 : DFA
    {
        public DFA66(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 66;
            this.eot = DFA66_eot;
            this.eof = DFA66_eof;
            this.min = DFA66_min;
            this.max = DFA66_max;
            this.accept = DFA66_accept;
            this.special = DFA66_special;
            this.transition = DFA66_transition;

        }

        override public string Description
        {
            get { return "675:14: ( ( joinedTables )=> joinedTables RPAREN -> ^( joinedTables ) | ( queryExpression )=> queryExpression RPAREN alias1 -> ^( TABLE queryExpression alias1 ) )"; }
        }

    }


    protected internal int DFA66_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA66_0 = input.LA(1);

                   	 
                   	int index66_0 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (LA66_0 == LPAREN) ) { s = 1; }

                   	else if ( (LA66_0 == LEFT) && (synpred102_Sql()) ) { s = 2; }

                   	else if ( (LA66_0 == RIGHT) && (synpred102_Sql()) ) { s = 3; }

                   	else if ( ((LA66_0 >= NonQuotedIdentifier && LA66_0 <= QuotedIdentifier)) && (synpred102_Sql()) ) { s = 4; }

                   	else if ( (LA66_0 == IDENTITYCOL) && (synpred102_Sql()) ) { s = 5; }

                   	else if ( (LA66_0 == ROWGUIDCOL) && (synpred102_Sql()) ) { s = 6; }

                   	else if ( (LA66_0 == AUTO || LA66_0 == BASE64 || LA66_0 == BINARY || LA66_0 == CAST || LA66_0 == CONCAT || LA66_0 == CUBE || LA66_0 == ELEMENTS || (LA66_0 >= EXPAND && LA66_0 <= FASTFIRSTROW) || LA66_0 == FORCE || LA66_0 == HASH || (LA66_0 >= KEEP && LA66_0 <= KEEPFIXED) || (LA66_0 >= LOOP && LA66_0 <= MERGE) || LA66_0 == NOLOCK || LA66_0 == PAGLOCK || LA66_0 == RAW || (LA66_0 >= READCOMMITED && LA66_0 <= READPAST) || LA66_0 == READUNCOMMITED || (LA66_0 >= REMOTE && LA66_0 <= REPEATABLEREAD) || LA66_0 == ROBUST || LA66_0 == ROLLUP || LA66_0 == ROWLOCK || LA66_0 == SERIALIZABLE || (LA66_0 >= TABLOCK && LA66_0 <= TABLOCKX) || LA66_0 == TIES || LA66_0 == UPDLOCK || LA66_0 == VIEWS || (LA66_0 >= XLOCK && LA66_0 <= XMLDATA)) && (synpred102_Sql()) ) { s = 7; }

                   	else if ( (LA66_0 == Variable) && (synpred102_Sql()) ) { s = 8; }

                   	else if ( (LA66_0 == COLON) && (synpred102_Sql()) ) { s = 9; }

                   	else if ( (LA66_0 == SELECT) && (synpred103_Sql()) ) { s = 10; }

                   	 
                   	input.Seek(index66_0);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 1 : 
                   	int LA66_1 = input.LA(1);

                   	 
                   	int index66_1 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (LA66_1 == LPAREN) ) { s = 11; }

                   	else if ( (LA66_1 == LEFT) && (synpred102_Sql()) ) { s = 12; }

                   	else if ( (LA66_1 == RIGHT) && (synpred102_Sql()) ) { s = 13; }

                   	else if ( ((LA66_1 >= NonQuotedIdentifier && LA66_1 <= QuotedIdentifier)) && (synpred102_Sql()) ) { s = 14; }

                   	else if ( (LA66_1 == IDENTITYCOL) && (synpred102_Sql()) ) { s = 15; }

                   	else if ( (LA66_1 == ROWGUIDCOL) && (synpred102_Sql()) ) { s = 16; }

                   	else if ( (LA66_1 == AUTO || LA66_1 == BASE64 || LA66_1 == BINARY || LA66_1 == CAST || LA66_1 == CONCAT || LA66_1 == CUBE || LA66_1 == ELEMENTS || (LA66_1 >= EXPAND && LA66_1 <= FASTFIRSTROW) || LA66_1 == FORCE || LA66_1 == HASH || (LA66_1 >= KEEP && LA66_1 <= KEEPFIXED) || (LA66_1 >= LOOP && LA66_1 <= MERGE) || LA66_1 == NOLOCK || LA66_1 == PAGLOCK || LA66_1 == RAW || (LA66_1 >= READCOMMITED && LA66_1 <= READPAST) || LA66_1 == READUNCOMMITED || (LA66_1 >= REMOTE && LA66_1 <= REPEATABLEREAD) || LA66_1 == ROBUST || LA66_1 == ROLLUP || LA66_1 == ROWLOCK || LA66_1 == SERIALIZABLE || (LA66_1 >= TABLOCK && LA66_1 <= TABLOCKX) || LA66_1 == TIES || LA66_1 == UPDLOCK || LA66_1 == VIEWS || (LA66_1 >= XLOCK && LA66_1 <= XMLDATA)) && (synpred102_Sql()) ) { s = 17; }

                   	else if ( (LA66_1 == Variable) && (synpred102_Sql()) ) { s = 18; }

                   	else if ( (LA66_1 == COLON) && (synpred102_Sql()) ) { s = 19; }

                   	else if ( (LA66_1 == SELECT) ) { s = 20; }

                   	 
                   	input.Seek(index66_1);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 2 : 
                   	int LA66_11 = input.LA(1);

                   	 
                   	int index66_11 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred102_Sql()) ) { s = 19; }

                   	else if ( (synpred103_Sql()) ) { s = 10; }

                   	 
                   	input.Seek(index66_11);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 3 : 
                   	int LA66_20 = input.LA(1);

                   	 
                   	int index66_20 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred102_Sql()) ) { s = 19; }

                   	else if ( (synpred103_Sql()) ) { s = 10; }

                   	 
                   	input.Seek(index66_20);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae66 =
            new NoViableAltException(dfa.Description, 66, _s, input);
        dfa.Error(nvae66);
        throw nvae66;
    }
    const string DFA67_eotS =
        "\x2d\uffff";
    const string DFA67_eofS =
        "\x01\x05\x2c\uffff";
    const string DFA67_minS =
        "\x01\x25\x03\uffff\x01\x00\x28\uffff";
    const string DFA67_maxS =
        "\x01\u0125\x03\uffff\x01\x00\x28\uffff";
    const string DFA67_acceptS =
        "\x01\uffff\x01\x01\x03\uffff\x01\x02\x27\uffff";
    const string DFA67_specialS =
        "\x04\uffff\x01\x00\x28\uffff}>";
    static readonly string[] DFA67_transitionS = {
            "\x01\x01\x02\uffff\x01\x01\x01\uffff\x01\x01\x02\uffff\x01"+
            "\x01\x06\uffff\x01\x01\x07\uffff\x01\x05\x01\x01\x05\uffff\x01"+
            "\x05\x01\x01\x14\uffff\x01\x01\x04\uffff\x01\x05\x04\uffff\x04"+
            "\x01\x03\uffff\x01\x05\x01\x01\x04\uffff\x01\x05\x03\uffff\x01"+
            "\x05\x01\x04\x08\uffff\x01\x05\x01\uffff\x01\x05\x02\uffff\x01"+
            "\x05\x02\x01\x02\uffff\x01\x05\x03\uffff\x01\x04\x01\x01\x01"+
            "\x04\x02\uffff\x01\x01\x06\uffff\x01\x05\x05\uffff\x01\x05\x01"+
            "\uffff\x01\x05\x02\uffff\x01\x01\x09\uffff\x01\x01\x01\uffff"+
            "\x02\x01\x01\uffff\x01\x01\x02\uffff\x01\x04\x01\x01\x05\uffff"+
            "\x01\x05\x01\x01\x01\uffff\x01\x01\x02\uffff\x01\x01\x04\uffff"+
            "\x01\x01\x07\uffff\x02\x01\x02\uffff\x01\x01\x07\uffff\x01\x05"+
            "\x03\uffff\x01\x01\x05\uffff\x01\x01\x02\uffff\x01\x05\x03\uffff"+
            "\x03\x01\x21\uffff\x01\x05\x01\uffff\x02\x05\x0e\uffff\x04\x01",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA67_eot = DFA.UnpackEncodedString(DFA67_eotS);
    static readonly short[] DFA67_eof = DFA.UnpackEncodedString(DFA67_eofS);
    static readonly char[] DFA67_min = DFA.UnpackEncodedStringToUnsignedChars(DFA67_minS);
    static readonly char[] DFA67_max = DFA.UnpackEncodedStringToUnsignedChars(DFA67_maxS);
    static readonly short[] DFA67_accept = DFA.UnpackEncodedString(DFA67_acceptS);
    static readonly short[] DFA67_special = DFA.UnpackEncodedString(DFA67_specialS);
    static readonly short[][] DFA67_transition = DFA.UnpackEncodedStringArray(DFA67_transitionS);

    protected class DFA67 : DFA
    {
        public DFA67(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 67;
            this.eot = DFA67_eot;
            this.eof = DFA67_eof;
            this.min = DFA67_min;
            this.max = DFA67_max;
            this.accept = DFA67_accept;
            this.special = DFA67_special;
            this.transition = DFA67_transition;

        }

        override public string Description
        {
            get { return "685:16: ( alias1 )?"; }
        }

    }


    protected internal int DFA67_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA67_4 = input.LA(1);

                   	 
                   	int index67_4 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred105_Sql()) ) { s = 1; }

                   	else if ( (true) ) { s = 5; }

                   	 
                   	input.Seek(index67_4);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae67 =
            new NoViableAltException(dfa.Description, 67, _s, input);
        dfa.Error(nvae67);
        throw nvae67;
    }
    const string DFA68_eotS =
        "\x31\uffff";
    const string DFA68_eofS =
        "\x01\x05\x30\uffff";
    const string DFA68_minS =
        "\x01\x25\x03\uffff\x01\x00\x2c\uffff";
    const string DFA68_maxS =
        "\x01\u0125\x03\uffff\x01\x00\x2c\uffff";
    const string DFA68_acceptS =
        "\x01\uffff\x01\x01\x03\uffff\x01\x02\x2b\uffff";
    const string DFA68_specialS =
        "\x04\uffff\x01\x00\x2c\uffff}>";
    static readonly string[] DFA68_transitionS = {
            "\x01\x01\x02\uffff\x01\x01\x01\uffff\x01\x01\x02\uffff\x01"+
            "\x01\x06\uffff\x01\x01\x07\uffff\x01\x05\x01\x01\x05\uffff\x01"+
            "\x05\x01\x01\x14\uffff\x01\x01\x04\uffff\x01\x05\x04\uffff\x04"+
            "\x01\x03\uffff\x01\x05\x01\x01\x04\uffff\x01\x05\x03\uffff\x01"+
            "\x05\x01\x04\x08\uffff\x01\x05\x01\uffff\x01\x05\x02\uffff\x01"+
            "\x05\x02\x01\x02\uffff\x01\x05\x03\uffff\x01\x04\x01\x01\x01"+
            "\x04\x02\uffff\x01\x01\x06\uffff\x01\x05\x05\uffff\x01\x05\x01"+
            "\uffff\x01\x05\x02\uffff\x01\x01\x09\uffff\x01\x01\x01\uffff"+
            "\x02\x01\x01\uffff\x01\x01\x02\uffff\x01\x04\x01\x01\x05\uffff"+
            "\x01\x05\x01\x01\x01\uffff\x01\x01\x02\uffff\x01\x01\x04\uffff"+
            "\x01\x01\x07\uffff\x02\x01\x02\uffff\x01\x01\x07\uffff\x01\x05"+
            "\x03\uffff\x01\x01\x05\uffff\x01\x01\x02\uffff\x01\x05\x01\uffff"+
            "\x01\x05\x01\uffff\x03\x01\x21\uffff\x04\x05\x0e\uffff\x04\x01",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA68_eot = DFA.UnpackEncodedString(DFA68_eotS);
    static readonly short[] DFA68_eof = DFA.UnpackEncodedString(DFA68_eofS);
    static readonly char[] DFA68_min = DFA.UnpackEncodedStringToUnsignedChars(DFA68_minS);
    static readonly char[] DFA68_max = DFA.UnpackEncodedStringToUnsignedChars(DFA68_maxS);
    static readonly short[] DFA68_accept = DFA.UnpackEncodedString(DFA68_acceptS);
    static readonly short[] DFA68_special = DFA.UnpackEncodedString(DFA68_specialS);
    static readonly short[][] DFA68_transition = DFA.UnpackEncodedStringArray(DFA68_transitionS);

    protected class DFA68 : DFA
    {
        public DFA68(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 68;
            this.eot = DFA68_eot;
            this.eof = DFA68_eof;
            this.min = DFA68_min;
            this.max = DFA68_max;
            this.accept = DFA68_accept;
            this.special = DFA68_special;
            this.transition = DFA68_transition;

        }

        override public string Description
        {
            get { return "689:16: ( alias1 )?"; }
        }

    }


    protected internal int DFA68_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA68_4 = input.LA(1);

                   	 
                   	int index68_4 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred107_Sql()) ) { s = 1; }

                   	else if ( (true) ) { s = 5; }

                   	 
                   	input.Seek(index68_4);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae68 =
            new NoViableAltException(dfa.Description, 68, _s, input);
        dfa.Error(nvae68);
        throw nvae68;
    }
    const string DFA71_eotS =
        "\x17\uffff";
    const string DFA71_eofS =
        "\x01\x03\x16\uffff";
    const string DFA71_minS =
        "\x01\x3c\x16\uffff";
    const string DFA71_maxS =
        "\x01\u0113\x16\uffff";
    const string DFA71_acceptS =
        "\x01\uffff\x01\x01\x01\uffff\x01\x02\x13\uffff";
    const string DFA71_specialS =
        "\x17\uffff}>";
    static readonly string[] DFA71_transitionS = {
            "\x01\x03\x06\uffff\x01\x03\x1a\uffff\x01\x03\x0b\uffff\x01"+
            "\x03\x05\uffff\x01\x03\x03\uffff\x02\x03\x08\uffff\x01\x03\x01"+
            "\uffff\x01\x03\x02\uffff\x01\x03\x04\uffff\x01\x03\x03\uffff"+
            "\x01\x03\x01\uffff\x01\x03\x09\uffff\x01\x03\x05\uffff\x01\x03"+
            "\x01\uffff\x01\x03\x14\uffff\x01\x03\x06\uffff\x01\x03\x1e\uffff"+
            "\x01\x03\x0c\uffff\x01\x03\x01\uffff\x01\x01\x25\uffff\x01\x03"+
            "\x01\x01\x02\x03",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA71_eot = DFA.UnpackEncodedString(DFA71_eotS);
    static readonly short[] DFA71_eof = DFA.UnpackEncodedString(DFA71_eofS);
    static readonly char[] DFA71_min = DFA.UnpackEncodedStringToUnsignedChars(DFA71_minS);
    static readonly char[] DFA71_max = DFA.UnpackEncodedStringToUnsignedChars(DFA71_maxS);
    static readonly short[] DFA71_accept = DFA.UnpackEncodedString(DFA71_acceptS);
    static readonly short[] DFA71_special = DFA.UnpackEncodedString(DFA71_specialS);
    static readonly short[][] DFA71_transition = DFA.UnpackEncodedStringArray(DFA71_transitionS);

    protected class DFA71 : DFA
    {
        public DFA71(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 71;
            this.eot = DFA71_eot;
            this.eof = DFA71_eof;
            this.min = DFA71_min;
            this.max = DFA71_max;
            this.accept = DFA71_accept;
            this.special = DFA71_special;
            this.transition = DFA71_transition;

        }

        override public string Description
        {
            get { return "689:26: ( ( WITH )? LPAREN tableHint ( COMMA tableHint )* RPAREN )?"; }
        }

    }

    const string DFA72_eotS =
        "\x2d\uffff";
    const string DFA72_eofS =
        "\x01\x05\x2c\uffff";
    const string DFA72_minS =
        "\x01\x25\x03\uffff\x01\x00\x28\uffff";
    const string DFA72_maxS =
        "\x01\u0125\x03\uffff\x01\x00\x28\uffff";
    const string DFA72_acceptS =
        "\x01\uffff\x01\x01\x03\uffff\x01\x02\x27\uffff";
    const string DFA72_specialS =
        "\x04\uffff\x01\x00\x28\uffff}>";
    static readonly string[] DFA72_transitionS = {
            "\x01\x01\x02\uffff\x01\x01\x01\uffff\x01\x01\x02\uffff\x01"+
            "\x01\x06\uffff\x01\x01\x07\uffff\x01\x05\x01\x01\x05\uffff\x01"+
            "\x05\x01\x01\x14\uffff\x01\x01\x04\uffff\x01\x05\x04\uffff\x04"+
            "\x01\x03\uffff\x01\x05\x01\x01\x04\uffff\x01\x05\x03\uffff\x01"+
            "\x05\x01\x04\x08\uffff\x01\x05\x01\uffff\x01\x05\x02\uffff\x01"+
            "\x05\x02\x01\x02\uffff\x01\x05\x03\uffff\x01\x04\x01\x01\x01"+
            "\x04\x02\uffff\x01\x01\x06\uffff\x01\x05\x05\uffff\x01\x05\x01"+
            "\uffff\x01\x05\x02\uffff\x01\x01\x09\uffff\x01\x01\x01\uffff"+
            "\x02\x01\x01\uffff\x01\x01\x02\uffff\x01\x04\x01\x01\x05\uffff"+
            "\x01\x05\x01\x01\x01\uffff\x01\x01\x02\uffff\x01\x01\x04\uffff"+
            "\x01\x01\x07\uffff\x02\x01\x02\uffff\x01\x01\x07\uffff\x01\x05"+
            "\x03\uffff\x01\x01\x05\uffff\x01\x01\x02\uffff\x01\x05\x03\uffff"+
            "\x03\x01\x21\uffff\x01\x05\x01\uffff\x02\x05\x0e\uffff\x04\x01",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA72_eot = DFA.UnpackEncodedString(DFA72_eotS);
    static readonly short[] DFA72_eof = DFA.UnpackEncodedString(DFA72_eofS);
    static readonly char[] DFA72_min = DFA.UnpackEncodedStringToUnsignedChars(DFA72_minS);
    static readonly char[] DFA72_max = DFA.UnpackEncodedStringToUnsignedChars(DFA72_maxS);
    static readonly short[] DFA72_accept = DFA.UnpackEncodedString(DFA72_acceptS);
    static readonly short[] DFA72_special = DFA.UnpackEncodedString(DFA72_specialS);
    static readonly short[][] DFA72_transition = DFA.UnpackEncodedStringArray(DFA72_transitionS);

    protected class DFA72 : DFA
    {
        public DFA72(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 72;
            this.eot = DFA72_eot;
            this.eof = DFA72_eof;
            this.min = DFA72_min;
            this.max = DFA72_max;
            this.accept = DFA72_accept;
            this.special = DFA72_special;
            this.transition = DFA72_transition;

        }

        override public string Description
        {
            get { return "691:16: ( alias1 )?"; }
        }

    }


    protected internal int DFA72_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA72_4 = input.LA(1);

                   	 
                   	int index72_4 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred112_Sql()) ) { s = 1; }

                   	else if ( (true) ) { s = 5; }

                   	 
                   	input.Seek(index72_4);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae72 =
            new NoViableAltException(dfa.Description, 72, _s, input);
        dfa.Error(nvae72);
        throw nvae72;
    }
    const string DFA73_eotS =
        "\x2d\uffff";
    const string DFA73_eofS =
        "\x01\x05\x2c\uffff";
    const string DFA73_minS =
        "\x01\x25\x03\uffff\x01\x00\x28\uffff";
    const string DFA73_maxS =
        "\x01\u0125\x03\uffff\x01\x00\x28\uffff";
    const string DFA73_acceptS =
        "\x01\uffff\x01\x01\x03\uffff\x01\x02\x27\uffff";
    const string DFA73_specialS =
        "\x04\uffff\x01\x00\x28\uffff}>";
    static readonly string[] DFA73_transitionS = {
            "\x01\x01\x02\uffff\x01\x01\x01\uffff\x01\x01\x02\uffff\x01"+
            "\x01\x06\uffff\x01\x01\x07\uffff\x01\x05\x01\x01\x05\uffff\x01"+
            "\x05\x01\x01\x14\uffff\x01\x01\x04\uffff\x01\x05\x04\uffff\x04"+
            "\x01\x03\uffff\x01\x05\x01\x01\x04\uffff\x01\x05\x03\uffff\x01"+
            "\x05\x01\x04\x08\uffff\x01\x05\x01\uffff\x01\x05\x02\uffff\x01"+
            "\x05\x02\x01\x02\uffff\x01\x05\x03\uffff\x01\x04\x01\x01\x01"+
            "\x04\x02\uffff\x01\x01\x06\uffff\x01\x05\x05\uffff\x01\x05\x01"+
            "\uffff\x01\x05\x02\uffff\x01\x01\x09\uffff\x01\x01\x01\uffff"+
            "\x02\x01\x01\uffff\x01\x01\x02\uffff\x01\x04\x01\x01\x05\uffff"+
            "\x01\x05\x01\x01\x01\uffff\x01\x01\x02\uffff\x01\x01\x04\uffff"+
            "\x01\x01\x07\uffff\x02\x01\x02\uffff\x01\x01\x07\uffff\x01\x05"+
            "\x03\uffff\x01\x01\x05\uffff\x01\x01\x02\uffff\x01\x05\x03\uffff"+
            "\x03\x01\x21\uffff\x01\x05\x01\uffff\x02\x05\x0e\uffff\x04\x01",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA73_eot = DFA.UnpackEncodedString(DFA73_eotS);
    static readonly short[] DFA73_eof = DFA.UnpackEncodedString(DFA73_eofS);
    static readonly char[] DFA73_min = DFA.UnpackEncodedStringToUnsignedChars(DFA73_minS);
    static readonly char[] DFA73_max = DFA.UnpackEncodedStringToUnsignedChars(DFA73_maxS);
    static readonly short[] DFA73_accept = DFA.UnpackEncodedString(DFA73_acceptS);
    static readonly short[] DFA73_special = DFA.UnpackEncodedString(DFA73_specialS);
    static readonly short[][] DFA73_transition = DFA.UnpackEncodedStringArray(DFA73_transitionS);

    protected class DFA73 : DFA
    {
        public DFA73(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 73;
            this.eot = DFA73_eot;
            this.eof = DFA73_eof;
            this.min = DFA73_min;
            this.max = DFA73_max;
            this.accept = DFA73_accept;
            this.special = DFA73_special;
            this.transition = DFA73_transition;

        }

        override public string Description
        {
            get { return "698:29: ( alias1 )?"; }
        }

    }


    protected internal int DFA73_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA73_4 = input.LA(1);

                   	 
                   	int index73_4 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred114_Sql()) ) { s = 1; }

                   	else if ( (true) ) { s = 5; }

                   	 
                   	input.Seek(index73_4);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae73 =
            new NoViableAltException(dfa.Description, 73, _s, input);
        dfa.Error(nvae73);
        throw nvae73;
    }
    const string DFA77_eotS =
        "\x15\uffff";
    const string DFA77_eofS =
        "\x01\x01\x14\uffff";
    const string DFA77_minS =
        "\x01\x3c\x14\uffff";
    const string DFA77_maxS =
        "\x01\u0113\x14\uffff";
    const string DFA77_acceptS =
        "\x01\uffff\x01\x02\x0c\uffff\x01\x01\x06\uffff";
    const string DFA77_specialS =
        "\x15\uffff}>";
    static readonly string[] DFA77_transitionS = {
            "\x01\x01\x06\uffff\x01\x0e\x1a\uffff\x01\x01\x0b\uffff\x01"+
            "\x01\x05\uffff\x01\x0e\x03\uffff\x01\x01\x01\x0e\x08\uffff\x01"+
            "\x0e\x01\uffff\x01\x01\x02\uffff\x01\x0e\x04\uffff\x01\x0e\x03"+
            "\uffff\x01\x0e\x01\uffff\x01\x0e\x09\uffff\x01\x01\x05\uffff"+
            "\x01\x01\x01\uffff\x01\x01\x14\uffff\x01\x0e\x06\uffff\x01\x0e"+
            "\x1e\uffff\x01\x01\x0c\uffff\x01\x01\x27\uffff\x01\x01\x01\uffff"+
            "\x02\x01",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA77_eot = DFA.UnpackEncodedString(DFA77_eotS);
    static readonly short[] DFA77_eof = DFA.UnpackEncodedString(DFA77_eofS);
    static readonly char[] DFA77_min = DFA.UnpackEncodedStringToUnsignedChars(DFA77_minS);
    static readonly char[] DFA77_max = DFA.UnpackEncodedStringToUnsignedChars(DFA77_maxS);
    static readonly short[] DFA77_accept = DFA.UnpackEncodedString(DFA77_acceptS);
    static readonly short[] DFA77_special = DFA.UnpackEncodedString(DFA77_specialS);
    static readonly short[][] DFA77_transition = DFA.UnpackEncodedStringArray(DFA77_transitionS);

    protected class DFA77 : DFA
    {
        public DFA77(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 77;
            this.eot = DFA77_eot;
            this.eof = DFA77_eof;
            this.min = DFA77_min;
            this.max = DFA77_max;
            this.accept = DFA77_accept;
            this.special = DFA77_special;
            this.transition = DFA77_transition;

        }

        override public string Description
        {
            get { return "()+ loopback of 710:22: ( joinOp tableSource joinPred )+"; }
        }

    }

    const string DFA82_eotS =
        "\x10\uffff";
    const string DFA82_eofS =
        "\x10\uffff";
    const string DFA82_minS =
        "\x01\x66\x0f\uffff";
    const string DFA82_maxS =
        "\x01\u00ec\x0f\uffff";
    const string DFA82_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x01\x03\x01\x04\x01\x05\x01\x06\x01"+
        "\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x0d\x01\x0e\x01"+
        "\x0f";
    const string DFA82_specialS =
        "\x10\uffff}>";
    static readonly string[] DFA82_transitionS = {
            "\x01\x02\x10\uffff\x01\x03\x05\uffff\x01\x01\x13\uffff\x01"+
            "\x04\x11\uffff\x01\x05\x0b\uffff\x01\x06\x01\x07\x01\uffff\x01"+
            "\x08\x03\uffff\x01\x09\x0b\uffff\x01\x0a\x04\uffff\x01\x0b\x07"+
            "\uffff\x01\x0c\x01\x0d\x0e\uffff\x01\x0e\x0c\uffff\x01\x0f",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA82_eot = DFA.UnpackEncodedString(DFA82_eotS);
    static readonly short[] DFA82_eof = DFA.UnpackEncodedString(DFA82_eofS);
    static readonly char[] DFA82_min = DFA.UnpackEncodedStringToUnsignedChars(DFA82_minS);
    static readonly char[] DFA82_max = DFA.UnpackEncodedStringToUnsignedChars(DFA82_maxS);
    static readonly short[] DFA82_accept = DFA.UnpackEncodedString(DFA82_acceptS);
    static readonly short[] DFA82_special = DFA.UnpackEncodedString(DFA82_specialS);
    static readonly short[][] DFA82_transition = DFA.UnpackEncodedStringArray(DFA82_transitionS);

    protected class DFA82 : DFA
    {
        public DFA82(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 82;
            this.eot = DFA82_eot;
            this.eof = DFA82_eof;
            this.min = DFA82_min;
            this.max = DFA82_max;
            this.accept = DFA82_accept;
            this.special = DFA82_special;
            this.transition = DFA82_transition;

        }

        override public string Description
        {
            get { return "721:1: tableHint : ( INDEX ( LPAREN ( identifier | Integer ) ( COMMA ( identifier | Integer ) )* RPAREN | ASSIGNEQUAL identifier ) | FASTFIRSTROW | HOLDLOCK | NOLOCK | PAGLOCK | READCOMMITED | READPAST | READUNCOMMITED | REPEATABLEREAD | ROWLOCK | SERIALIZABLE | TABLOCK | TABLOCKX | UPDLOCK | XLOCK );"; }
        }

    }

    const string DFA88_eotS =
        "\x12\uffff";
    const string DFA88_eofS =
        "\x01\x02\x11\uffff";
    const string DFA88_minS =
        "\x01\x25\x11\uffff";
    const string DFA88_maxS =
        "\x01\u0125\x11\uffff";
    const string DFA88_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x0f\uffff";
    const string DFA88_specialS =
        "\x12\uffff}>";
    static readonly string[] DFA88_transitionS = {
            "\x01\x02\x02\uffff\x01\x02\x01\uffff\x01\x02\x02\uffff\x01"+
            "\x02\x06\uffff\x01\x02\x04\uffff\x01\x01\x02\uffff\x02\x02\x06"+
            "\uffff\x01\x02\x14\uffff\x01\x02\x04\uffff\x01\x02\x04\uffff"+
            "\x04\x02\x03\uffff\x02\x02\x03\uffff\x01\x02\x05\uffff\x01\x02"+
            "\x0a\uffff\x02\x02\x02\uffff\x02\x02\x06\uffff\x03\x02\x02\uffff"+
            "\x01\x02\x0c\uffff\x01\x02\x01\uffff\x01\x02\x02\uffff\x01\x02"+
            "\x09\uffff\x01\x02\x01\uffff\x02\x02\x01\uffff\x01\x02\x02\uffff"+
            "\x02\x02\x06\uffff\x01\x02\x01\uffff\x01\x02\x02\uffff\x01\x02"+
            "\x04\uffff\x01\x02\x07\uffff\x02\x02\x02\uffff\x01\x02\x07\uffff"+
            "\x01\x02\x03\uffff\x01\x02\x05\uffff\x01\x02\x06\uffff\x03\x02"+
            "\x21\uffff\x01\x02\x01\uffff\x02\x02\x0e\uffff\x04\x02",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA88_eot = DFA.UnpackEncodedString(DFA88_eotS);
    static readonly short[] DFA88_eof = DFA.UnpackEncodedString(DFA88_eofS);
    static readonly char[] DFA88_min = DFA.UnpackEncodedStringToUnsignedChars(DFA88_minS);
    static readonly char[] DFA88_max = DFA.UnpackEncodedStringToUnsignedChars(DFA88_maxS);
    static readonly short[] DFA88_accept = DFA.UnpackEncodedString(DFA88_acceptS);
    static readonly short[] DFA88_special = DFA.UnpackEncodedString(DFA88_specialS);
    static readonly short[][] DFA88_transition = DFA.UnpackEncodedStringArray(DFA88_transitionS);

    protected class DFA88 : DFA
    {
        public DFA88(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 88;
            this.eot = DFA88_eot;
            this.eof = DFA88_eof;
            this.min = DFA88_min;
            this.max = DFA88_max;
            this.accept = DFA88_accept;
            this.special = DFA88_special;
            this.transition = DFA88_transition;

        }

        override public string Description
        {
            get { return "785:5: ( collate )?"; }
        }

    }

    const string DFA89_eotS =
        "\x42\uffff";
    const string DFA89_eofS =
        "\x01\x01\x41\uffff";
    const string DFA89_minS =
        "\x01\x23\x08\uffff\x01\x00\x01\uffff\x01\x00\x36\uffff";
    const string DFA89_maxS =
        "\x01\u0132\x08\uffff\x01\x00\x01\uffff\x01\x00\x36\uffff";
    const string DFA89_acceptS =
        "\x01\uffff\x01\x02\x3f\uffff\x01\x01";
    const string DFA89_specialS =
        "\x09\uffff\x01\x00\x01\uffff\x01\x01\x36\uffff}>";
    static readonly string[] DFA89_transitionS = {
            "\x01\x01\x01\uffff\x02\x01\x01\uffff\x01\x01\x01\uffff\x01"+
            "\x01\x01\uffff\x02\x01\x05\uffff\x02\x01\x07\uffff\x02\x01\x01"+
            "\uffff\x01\x01\x03\uffff\x02\x01\x03\uffff\x02\x01\x08\uffff"+
            "\x01\x01\x06\uffff\x03\x01\x01\uffff\x02\x01\x04\uffff\x04\x01"+
            "\x03\uffff\x02\x01\x01\uffff\x01\x01\x01\uffff\x02\x01\x03\uffff"+
            "\x03\x01\x03\uffff\x01\x01\x01\uffff\x01\x01\x01\uffff\x01\x01"+
            "\x01\uffff\x06\x01\x02\uffff\x02\x01\x02\uffff\x03\x01\x02\uffff"+
            "\x01\x01\x01\uffff\x02\x01\x03\uffff\x01\x01\x05\uffff\x03\x01"+
            "\x02\uffff\x02\x01\x08\uffff\x01\x01\x01\uffff\x02\x01\x01\uffff"+
            "\x01\x01\x02\uffff\x02\x01\x05\uffff\x02\x01\x01\uffff\x01\x01"+
            "\x01\uffff\x02\x01\x04\uffff\x02\x01\x05\uffff\x03\x01\x01\uffff"+
            "\x02\x01\x07\uffff\x01\x01\x03\uffff\x01\x01\x05\uffff\x01\x01"+
            "\x01\uffff\x02\x01\x01\uffff\x01\x01\x01\uffff\x2b\x01\x01\uffff"+
            "\x01\x01\x01\uffff\x01\x09\x01\x0b\x03\x41\x03\uffff\x11\x01",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA89_eot = DFA.UnpackEncodedString(DFA89_eotS);
    static readonly short[] DFA89_eof = DFA.UnpackEncodedString(DFA89_eofS);
    static readonly char[] DFA89_min = DFA.UnpackEncodedStringToUnsignedChars(DFA89_minS);
    static readonly char[] DFA89_max = DFA.UnpackEncodedStringToUnsignedChars(DFA89_maxS);
    static readonly short[] DFA89_accept = DFA.UnpackEncodedString(DFA89_acceptS);
    static readonly short[] DFA89_special = DFA.UnpackEncodedString(DFA89_specialS);
    static readonly short[][] DFA89_transition = DFA.UnpackEncodedStringArray(DFA89_transitionS);

    protected class DFA89 : DFA
    {
        public DFA89(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 89;
            this.eot = DFA89_eot;
            this.eof = DFA89_eof;
            this.min = DFA89_min;
            this.max = DFA89_max;
            this.accept = DFA89_accept;
            this.special = DFA89_special;
            this.transition = DFA89_transition;

        }

        override public string Description
        {
            get { return "()* loopback of 796:20: ( ( PLUS | MINUS | AMPERSAND | BITWISEOR | BITWISEXOR ) arithMultsOp )*"; }
        }

    }


    protected internal int DFA89_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA89_9 = input.LA(1);

                   	 
                   	int index89_9 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred151_Sql()) ) { s = 65; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index89_9);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 1 : 
                   	int LA89_11 = input.LA(1);

                   	 
                   	int index89_11 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred151_Sql()) ) { s = 65; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index89_11);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae89 =
            new NoViableAltException(dfa.Description, 89, _s, input);
        dfa.Error(nvae89);
        throw nvae89;
    }
    const string DFA90_eotS =
        "\x65\uffff";
    const string DFA90_eofS =
        "\x01\x01\x03\uffff\x01\x01\x60\uffff";
    const string DFA90_minS =
        "\x01\x23\x03\uffff\x01\x28\x60\uffff";
    const string DFA90_maxS =
        "\x01\u0132\x03\uffff\x01\u012a\x60\uffff";
    const string DFA90_acceptS =
        "\x01\uffff\x01\x02\x40\uffff\x01\x01\x22\uffff";
    const string DFA90_specialS =
        "\x65\uffff}>";
    static readonly string[] DFA90_transitionS = {
            "\x01\x01\x01\uffff\x02\x01\x01\uffff\x01\x01\x01\uffff\x01"+
            "\x01\x01\uffff\x02\x01\x05\uffff\x02\x01\x07\uffff\x02\x01\x01"+
            "\uffff\x01\x01\x03\uffff\x02\x01\x03\uffff\x02\x01\x08\uffff"+
            "\x01\x01\x06\uffff\x03\x01\x01\uffff\x02\x01\x04\uffff\x04\x01"+
            "\x03\uffff\x02\x01\x01\uffff\x01\x01\x01\uffff\x02\x01\x03\uffff"+
            "\x03\x01\x03\uffff\x01\x01\x01\uffff\x01\x01\x01\uffff\x01\x01"+
            "\x01\uffff\x06\x01\x02\uffff\x02\x01\x02\uffff\x03\x01\x02\uffff"+
            "\x01\x01\x01\uffff\x02\x01\x03\uffff\x01\x01\x05\uffff\x03\x01"+
            "\x02\uffff\x02\x01\x08\uffff\x01\x01\x01\uffff\x02\x01\x01\uffff"+
            "\x01\x01\x02\uffff\x02\x01\x05\uffff\x02\x01\x01\uffff\x01\x01"+
            "\x01\uffff\x02\x01\x04\uffff\x02\x01\x05\uffff\x03\x01\x01\uffff"+
            "\x02\x01\x07\uffff\x01\x01\x03\uffff\x01\x01\x05\uffff\x01\x01"+
            "\x01\uffff\x02\x01\x01\uffff\x01\x01\x01\uffff\x29\x01\x01\x04"+
            "\x01\x01\x01\uffff\x01\x01\x01\uffff\x05\x01\x02\x42\x01\uffff"+
            "\x11\x01",
            "",
            "",
            "",
            "\x01\x42\x01\uffff\x01\x42\x02\uffff\x01\x42\x05\uffff\x02"+
            "\x42\x07\uffff\x01\x01\x01\x42\x06\uffff\x01\x42\x03\uffff\x02"+
            "\x42\x0f\uffff\x01\x42\x04\uffff\x01\x01\x04\uffff\x04\x42\x03"+
            "\uffff\x01\x01\x01\x42\x03\uffff\x01\x01\x05\uffff\x01\x42\x04"+
            "\uffff\x01\x42\x05\uffff\x02\x01\x02\uffff\x02\x42\x02\uffff"+
            "\x01\x42\x03\uffff\x03\x42\x02\uffff\x01\x42\x02\uffff\x01\x42"+
            "\x09\uffff\x01\x01\x01\uffff\x01\x01\x02\uffff\x01\x42\x09\uffff"+
            "\x01\x42\x01\uffff\x02\x42\x01\uffff\x01\x42\x02\uffff\x02\x42"+
            "\x05\uffff\x02\x42\x01\uffff\x01\x42\x01\uffff\x02\x42\x04\uffff"+
            "\x02\x42\x05\uffff\x03\x42\x02\uffff\x01\x42\x07\uffff\x01\x01"+
            "\x03\uffff\x01\x42\x05\uffff\x01\x42\x06\uffff\x24\x42\x01\x01"+
            "\x01\x42\x02\x01\x01\x42\x01\uffff\x01\x42\x03\uffff\x02\x42"+
            "\x06\uffff\x09\x42",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA90_eot = DFA.UnpackEncodedString(DFA90_eotS);
    static readonly short[] DFA90_eof = DFA.UnpackEncodedString(DFA90_eofS);
    static readonly char[] DFA90_min = DFA.UnpackEncodedStringToUnsignedChars(DFA90_minS);
    static readonly char[] DFA90_max = DFA.UnpackEncodedStringToUnsignedChars(DFA90_maxS);
    static readonly short[] DFA90_accept = DFA.UnpackEncodedString(DFA90_acceptS);
    static readonly short[] DFA90_special = DFA.UnpackEncodedString(DFA90_specialS);
    static readonly short[][] DFA90_transition = DFA.UnpackEncodedStringArray(DFA90_transitionS);

    protected class DFA90 : DFA
    {
        public DFA90(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 90;
            this.eot = DFA90_eot;
            this.eof = DFA90_eof;
            this.min = DFA90_min;
            this.max = DFA90_max;
            this.accept = DFA90_accept;
            this.special = DFA90_special;
            this.transition = DFA90_transition;

        }

        override public string Description
        {
            get { return "()* loopback of 801:17: ( ( STAR | DIVIDE | MOD ) unaryExpr )*"; }
        }

    }

    const string DFA91_eotS =
        "\x17\uffff";
    const string DFA91_eofS =
        "\x17\uffff";
    const string DFA91_minS =
        "\x01\x28\x16\uffff";
    const string DFA91_maxS =
        "\x01\u012a\x16\uffff";
    const string DFA91_acceptS =
        "\x01\uffff\x01\x01\x02\uffff\x01\x02\x12\uffff";
    const string DFA91_specialS =
        "\x17\uffff}>";
    static readonly string[] DFA91_transitionS = {
            "\x01\x04\x01\uffff\x01\x04\x02\uffff\x01\x04\x05\uffff\x02"+
            "\x04\x08\uffff\x01\x04\x06\uffff\x01\x04\x03\uffff\x02\x04\x0f"+
            "\uffff\x01\x04\x09\uffff\x04\x04\x04\uffff\x01\x04\x09\uffff"+
            "\x01\x04\x04\uffff\x01\x04\x09\uffff\x02\x04\x02\uffff\x01\x04"+
            "\x03\uffff\x03\x04\x02\uffff\x01\x04\x02\uffff\x01\x04\x0e\uffff"+
            "\x01\x04\x09\uffff\x01\x04\x01\uffff\x02\x04\x01\uffff\x01\x04"+
            "\x02\uffff\x02\x04\x05\uffff\x02\x04\x01\uffff\x01\x04\x01\uffff"+
            "\x02\x04\x04\uffff\x02\x04\x05\uffff\x03\x04\x02\uffff\x01\x04"+
            "\x0b\uffff\x01\x04\x05\uffff\x01\x04\x06\uffff\x24\x04\x01\uffff"+
            "\x01\x04\x02\uffff\x01\x04\x01\uffff\x01\x04\x03\uffff\x02\x01"+
            "\x06\uffff\x08\x04\x01\x01",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA91_eot = DFA.UnpackEncodedString(DFA91_eotS);
    static readonly short[] DFA91_eof = DFA.UnpackEncodedString(DFA91_eofS);
    static readonly char[] DFA91_min = DFA.UnpackEncodedStringToUnsignedChars(DFA91_minS);
    static readonly char[] DFA91_max = DFA.UnpackEncodedStringToUnsignedChars(DFA91_maxS);
    static readonly short[] DFA91_accept = DFA.UnpackEncodedString(DFA91_acceptS);
    static readonly short[] DFA91_special = DFA.UnpackEncodedString(DFA91_specialS);
    static readonly short[][] DFA91_transition = DFA.UnpackEncodedStringArray(DFA91_transitionS);

    protected class DFA91 : DFA
    {
        public DFA91(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 91;
            this.eot = DFA91_eot;
            this.eof = DFA91_eof;
            this.min = DFA91_min;
            this.max = DFA91_max;
            this.accept = DFA91_accept;
            this.special = DFA91_special;
            this.transition = DFA91_transition;

        }

        override public string Description
        {
            get { return "804:1: unaryExpr : ( unaryOperator subExpression | subExpression );"; }
        }

    }

    const string DFA93_eotS =
        "\u0169\uffff";
    const string DFA93_eofS =
        "\x02\uffff\x01\x16\x0c\uffff\x04\x16\u0156\uffff";
    const string DFA93_minS =
        "\x01\x28\x01\uffff\x01\x23\x0c\uffff\x04\x23\x01\uffff\x02\x00"+
        "\x42\uffff\x02\x00\x42\uffff\x02\x00\x42\uffff\x01\x00\x0c\uffff"+
        "\x01\x00\x36\uffff\x01\x00\x0c\uffff\x01\x00\x37\uffff";
    const string DFA93_maxS =
        "\x01\u0129\x01\uffff\x01\u0132\x0c\uffff\x04\u0132\x01\uffff\x02"+
        "\x00\x42\uffff\x02\x00\x42\uffff\x02\x00\x42\uffff\x01\x00\x0c\uffff"+
        "\x01\x00\x36\uffff\x01\x00\x0c\uffff\x01\x00\x37\uffff";
    const string DFA93_acceptS =
        "\x01\uffff\x01\x01\x01\uffff\x01\x03\x01\x04\x07\uffff\x01\x05"+
        "\x02\x06\x04\uffff\x01\x07\x02\uffff\x01\x08\u0151\uffff\x01\x02";
    const string DFA93_specialS =
        "\x01\x00\x13\uffff\x01\x01\x01\x02\x42\uffff\x01\x03\x01\x04\x42"+
        "\uffff\x01\x05\x01\x06\x42\uffff\x01\x07\x0c\uffff\x01\x08\x36\uffff"+
        "\x01\x09\x0c\uffff\x01\x0a\x37\uffff}>";
    static readonly string[] DFA93_transitionS = {
            "\x01\x12\x01\uffff\x01\x12\x02\uffff\x01\x12\x05\uffff\x01"+
            "\x01\x01\x02\x08\uffff\x01\x12\x06\uffff\x01\x12\x03\uffff\x02"+
            "\x03\x0f\uffff\x01\x12\x09\uffff\x04\x12\x04\uffff\x01\x12\x09"+
            "\uffff\x01\x12\x04\uffff\x01\x10\x09\uffff\x02\x12\x02\uffff"+
            "\x01\x0d\x03\uffff\x03\x12\x02\uffff\x01\x12\x02\uffff\x01\x04"+
            "\x0e\uffff\x01\x12\x09\uffff\x01\x12\x01\uffff\x02\x12\x01\uffff"+
            "\x01\x12\x02\uffff\x02\x12\x05\uffff\x01\x0e\x01\x12\x01\uffff"+
            "\x01\x12\x01\uffff\x01\x11\x01\x12\x04\uffff\x01\x12\x01\x03"+
            "\x05\uffff\x01\x03\x02\x12\x02\uffff\x01\x12\x0b\uffff\x01\x12"+
            "\x05\uffff\x01\x12\x06\uffff\x03\x12\x21\x04\x01\uffff\x01\x13"+
            "\x02\uffff\x01\x04\x01\uffff\x01\x0c\x0b\uffff\x02\x04\x02\x0f"+
            "\x04\x04",
            "",
            "\x01\x16\x01\uffff\x02\x16\x01\uffff\x01\x16\x01\uffff\x01"+
            "\x16\x01\uffff\x02\x16\x05\uffff\x02\x16\x04\uffff\x01\x16\x02"+
            "\uffff\x02\x16\x01\uffff\x01\x16\x03\uffff\x02\x16\x03\uffff"+
            "\x02\x16\x08\uffff\x01\x16\x06\uffff\x03\x16\x01\uffff\x02\x16"+
            "\x04\uffff\x04\x16\x03\uffff\x02\x16\x01\uffff\x01\x16\x01\uffff"+
            "\x02\x16\x03\uffff\x03\x16\x03\uffff\x01\x16\x01\uffff\x01\x16"+
            "\x01\uffff\x01\x16\x01\uffff\x06\x16\x02\uffff\x02\x16\x02\uffff"+
            "\x03\x16\x02\uffff\x01\x16\x01\uffff\x02\x16\x03\uffff\x01\x16"+
            "\x05\uffff\x03\x16\x02\uffff\x02\x16\x08\uffff\x01\x16\x01\uffff"+
            "\x02\x16\x01\uffff\x01\x16\x02\uffff\x02\x16\x05\uffff\x02\x16"+
            "\x01\uffff\x01\x16\x01\uffff\x02\x16\x04\uffff\x02\x16\x05\uffff"+
            "\x03\x16\x01\uffff\x02\x16\x07\uffff\x01\x16\x03\uffff\x01\x16"+
            "\x05\uffff\x01\x16\x01\uffff\x02\x16\x01\uffff\x01\x16\x01\uffff"+
            "\x25\x16\x01\x14\x05\x16\x01\uffff\x01\x16\x01\uffff\x07\x16"+
            "\x01\x15\x11\x16",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\x16\x01\uffff\x02\x16\x01\uffff\x01\x16\x01\uffff\x01"+
            "\x16\x01\uffff\x02\x16\x05\uffff\x02\x16\x04\uffff\x01\x16\x02"+
            "\uffff\x02\x16\x01\uffff\x01\x16\x03\uffff\x02\x16\x03\uffff"+
            "\x02\x16\x08\uffff\x01\x16\x06\uffff\x03\x16\x01\uffff\x02\x16"+
            "\x04\uffff\x04\x16\x03\uffff\x02\x16\x01\uffff\x01\x16\x01\uffff"+
            "\x02\x16\x03\uffff\x03\x16\x03\uffff\x01\x16\x01\uffff\x01\x16"+
            "\x01\uffff\x01\x16\x01\uffff\x06\x16\x02\uffff\x02\x16\x02\uffff"+
            "\x03\x16\x02\uffff\x01\x16\x01\uffff\x02\x16\x03\uffff\x01\x16"+
            "\x05\uffff\x03\x16\x02\uffff\x02\x16\x08\uffff\x01\x16\x01\uffff"+
            "\x02\x16\x01\uffff\x01\x16\x02\uffff\x02\x16\x05\uffff\x02\x16"+
            "\x01\uffff\x01\x16\x01\uffff\x02\x16\x04\uffff\x02\x16\x05\uffff"+
            "\x03\x16\x01\uffff\x02\x16\x07\uffff\x01\x16\x03\uffff\x01\x16"+
            "\x05\uffff\x01\x16\x01\uffff\x02\x16\x01\uffff\x01\x16\x01\uffff"+
            "\x25\x16\x01\x59\x05\x16\x01\uffff\x01\x16\x01\uffff\x07\x16"+
            "\x01\x58\x11\x16",
            "\x01\x16\x01\uffff\x02\x16\x01\uffff\x01\x16\x01\uffff\x01"+
            "\x16\x01\uffff\x02\x16\x05\uffff\x02\x16\x04\uffff\x01\x16\x02"+
            "\uffff\x02\x16\x01\uffff\x01\x16\x03\uffff\x02\x16\x03\uffff"+
            "\x02\x16\x08\uffff\x01\x16\x06\uffff\x03\x16\x01\uffff\x02\x16"+
            "\x04\uffff\x04\x16\x03\uffff\x02\x16\x01\uffff\x01\x16\x01\uffff"+
            "\x02\x16\x03\uffff\x03\x16\x03\uffff\x01\x16\x01\uffff\x01\x16"+
            "\x01\uffff\x01\x16\x01\uffff\x06\x16\x02\uffff\x02\x16\x02\uffff"+
            "\x03\x16\x02\uffff\x01\x16\x01\uffff\x02\x16\x03\uffff\x01\x16"+
            "\x05\uffff\x03\x16\x02\uffff\x02\x16\x08\uffff\x01\x16\x01\uffff"+
            "\x02\x16\x01\uffff\x01\x16\x02\uffff\x02\x16\x05\uffff\x02\x16"+
            "\x01\uffff\x01\x16\x01\uffff\x02\x16\x04\uffff\x02\x16\x05\uffff"+
            "\x03\x16\x01\uffff\x02\x16\x07\uffff\x01\x16\x03\uffff\x01\x16"+
            "\x05\uffff\x01\x16\x01\uffff\x02\x16\x01\uffff\x01\x16\x01\uffff"+
            "\x25\x16\x01\u009d\x05\x16\x01\uffff\x01\x16\x01\uffff\x07\x16"+
            "\x01\u009c\x11\x16",
            "\x01\x16\x01\uffff\x02\x16\x01\uffff\x01\x16\x01\uffff\x01"+
            "\x16\x01\uffff\x02\x16\x05\uffff\x02\x16\x04\uffff\x01\x16\x02"+
            "\uffff\x02\x16\x01\uffff\x01\x16\x03\uffff\x02\x16\x03\uffff"+
            "\x02\x16\x08\uffff\x01\x16\x06\uffff\x03\x16\x01\uffff\x02\x16"+
            "\x04\uffff\x04\x16\x03\uffff\x02\x16\x01\uffff\x01\x16\x01\uffff"+
            "\x02\x16\x03\uffff\x03\x16\x03\uffff\x01\x16\x01\uffff\x01\x16"+
            "\x01\uffff\x01\x16\x01\uffff\x06\x16\x02\uffff\x02\x16\x02\uffff"+
            "\x03\x16\x02\uffff\x01\x16\x01\uffff\x02\x16\x03\uffff\x01\x16"+
            "\x05\uffff\x03\x16\x02\uffff\x02\x16\x08\uffff\x01\x16\x01\uffff"+
            "\x02\x16\x01\uffff\x01\x16\x02\uffff\x02\x16\x05\uffff\x02\x16"+
            "\x01\uffff\x01\x16\x01\uffff\x02\x16\x04\uffff\x02\x16\x05\uffff"+
            "\x03\x16\x01\uffff\x02\x16\x07\uffff\x01\x16\x03\uffff\x01\x16"+
            "\x05\uffff\x01\x16\x01\uffff\x02\x16\x01\uffff\x01\x16\x01\uffff"+
            "\x25\x16\x01\u00ed\x05\x16\x01\uffff\x01\x16\x01\uffff\x07\x16"+
            "\x01\u00e0\x11\x16",
            "\x01\x16\x01\uffff\x02\x16\x01\uffff\x01\x16\x01\uffff\x01"+
            "\x16\x01\uffff\x02\x16\x05\uffff\x02\x16\x04\uffff\x01\x16\x02"+
            "\uffff\x02\x16\x01\uffff\x01\x16\x03\uffff\x02\x16\x03\uffff"+
            "\x02\x16\x08\uffff\x01\x16\x06\uffff\x03\x16\x01\uffff\x02\x16"+
            "\x04\uffff\x04\x16\x03\uffff\x02\x16\x01\uffff\x01\x16\x01\uffff"+
            "\x02\x16\x03\uffff\x03\x16\x03\uffff\x01\x16\x01\uffff\x01\x16"+
            "\x01\uffff\x01\x16\x01\uffff\x06\x16\x02\uffff\x02\x16\x02\uffff"+
            "\x03\x16\x02\uffff\x01\x16\x01\uffff\x02\x16\x03\uffff\x01\x16"+
            "\x05\uffff\x03\x16\x02\uffff\x02\x16\x08\uffff\x01\x16\x01\uffff"+
            "\x02\x16\x01\uffff\x01\x16\x02\uffff\x02\x16\x05\uffff\x02\x16"+
            "\x01\uffff\x01\x16\x01\uffff\x02\x16\x04\uffff\x02\x16\x05\uffff"+
            "\x03\x16\x01\uffff\x02\x16\x07\uffff\x01\x16\x03\uffff\x01\x16"+
            "\x05\uffff\x01\x16\x01\uffff\x02\x16\x01\uffff\x01\x16\x01\uffff"+
            "\x25\x16\x01\u0131\x05\x16\x01\uffff\x01\x16\x01\uffff\x07\x16"+
            "\x01\u0124\x11\x16",
            "",
            "\x01\uffff",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA93_eot = DFA.UnpackEncodedString(DFA93_eotS);
    static readonly short[] DFA93_eof = DFA.UnpackEncodedString(DFA93_eofS);
    static readonly char[] DFA93_min = DFA.UnpackEncodedStringToUnsignedChars(DFA93_minS);
    static readonly char[] DFA93_max = DFA.UnpackEncodedStringToUnsignedChars(DFA93_maxS);
    static readonly short[] DFA93_accept = DFA.UnpackEncodedString(DFA93_acceptS);
    static readonly short[] DFA93_special = DFA.UnpackEncodedString(DFA93_specialS);
    static readonly short[][] DFA93_transition = DFA.UnpackEncodedStringArray(DFA93_transitionS);

    protected class DFA93 : DFA
    {
        public DFA93(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 93;
            this.eot = DFA93_eot;
            this.eof = DFA93_eof;
            this.min = DFA93_min;
            this.max = DFA93_max;
            this.accept = DFA93_accept;
            this.special = DFA93_special;
            this.transition = DFA93_transition;

        }

        override public string Description
        {
            get { return "812:5: ( caseFunction | castFunction | parameterlessFunction | constantExpr | Variable | ( function )=> function | LPAREN ( ( selectStatement )=> selectStatement | expression ) RPAREN | dbObject )"; }
        }

    }


    protected internal int DFA93_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA93_0 = input.LA(1);

                   	 
                   	int index93_0 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (LA93_0 == CASE) ) { s = 1; }

                   	else if ( (LA93_0 == CAST) ) { s = 2; }

                   	else if ( ((LA93_0 >= CURRENT_TIMESTAMP && LA93_0 <= CURRENT_USER) || LA93_0 == SESSION_USER || LA93_0 == SYSTEM_USER) ) { s = 3; }

                   	else if ( (LA93_0 == NULL || (LA93_0 >= F_CONNECTIONS && LA93_0 <= F_VERSION) || LA93_0 == Integer || (LA93_0 >= UnicodeStringLiteral && LA93_0 <= ASCIIStringLiteral) || (LA93_0 >= Real && LA93_0 <= ODBCDateTime)) ) { s = 4; }

                   	else if ( (LA93_0 == Variable) ) { s = 12; }

                   	else if ( (LA93_0 == LEFT) && (synpred161_Sql()) ) { s = 13; }

                   	else if ( (LA93_0 == RIGHT) && (synpred161_Sql()) ) { s = 14; }

                   	else if ( ((LA93_0 >= NonQuotedIdentifier && LA93_0 <= QuotedIdentifier)) ) { s = 15; }

                   	else if ( (LA93_0 == IDENTITYCOL) ) { s = 16; }

                   	else if ( (LA93_0 == ROWGUIDCOL) ) { s = 17; }

                   	else if ( (LA93_0 == AUTO || LA93_0 == BASE64 || LA93_0 == BINARY || LA93_0 == CONCAT || LA93_0 == CUBE || LA93_0 == ELEMENTS || (LA93_0 >= EXPAND && LA93_0 <= FASTFIRSTROW) || LA93_0 == FORCE || LA93_0 == HASH || (LA93_0 >= KEEP && LA93_0 <= KEEPFIXED) || (LA93_0 >= LOOP && LA93_0 <= MERGE) || LA93_0 == NOLOCK || LA93_0 == PAGLOCK || LA93_0 == RAW || (LA93_0 >= READCOMMITED && LA93_0 <= READPAST) || LA93_0 == READUNCOMMITED || (LA93_0 >= REMOTE && LA93_0 <= REPEATABLEREAD) || LA93_0 == ROBUST || LA93_0 == ROLLUP || LA93_0 == ROWLOCK || LA93_0 == SERIALIZABLE || (LA93_0 >= TABLOCK && LA93_0 <= TABLOCKX) || LA93_0 == TIES || LA93_0 == UPDLOCK || LA93_0 == VIEWS || (LA93_0 >= XLOCK && LA93_0 <= XMLDATA)) ) { s = 18; }

                   	else if ( (LA93_0 == LPAREN) ) { s = 19; }

                   	 
                   	input.Seek(index93_0);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 1 : 
                   	int LA93_20 = input.LA(1);

                   	 
                   	int index93_20 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred157_Sql()) ) { s = 360; }

                   	else if ( (synpred161_Sql()) ) { s = 14; }

                   	else if ( (true) ) { s = 22; }

                   	 
                   	input.Seek(index93_20);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 2 : 
                   	int LA93_21 = input.LA(1);

                   	 
                   	int index93_21 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred161_Sql()) ) { s = 14; }

                   	else if ( (true) ) { s = 22; }

                   	 
                   	input.Seek(index93_21);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 3 : 
                   	int LA93_88 = input.LA(1);

                   	 
                   	int index93_88 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred161_Sql()) ) { s = 14; }

                   	else if ( (true) ) { s = 22; }

                   	 
                   	input.Seek(index93_88);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 4 : 
                   	int LA93_89 = input.LA(1);

                   	 
                   	int index93_89 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred161_Sql()) ) { s = 14; }

                   	else if ( (true) ) { s = 22; }

                   	 
                   	input.Seek(index93_89);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 5 : 
                   	int LA93_156 = input.LA(1);

                   	 
                   	int index93_156 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred161_Sql()) ) { s = 14; }

                   	else if ( (true) ) { s = 22; }

                   	 
                   	input.Seek(index93_156);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 6 : 
                   	int LA93_157 = input.LA(1);

                   	 
                   	int index93_157 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred161_Sql()) ) { s = 14; }

                   	else if ( (true) ) { s = 22; }

                   	 
                   	input.Seek(index93_157);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 7 : 
                   	int LA93_224 = input.LA(1);

                   	 
                   	int index93_224 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred161_Sql()) ) { s = 14; }

                   	else if ( (true) ) { s = 22; }

                   	 
                   	input.Seek(index93_224);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 8 : 
                   	int LA93_237 = input.LA(1);

                   	 
                   	int index93_237 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred161_Sql()) ) { s = 14; }

                   	else if ( (true) ) { s = 22; }

                   	 
                   	input.Seek(index93_237);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 9 : 
                   	int LA93_292 = input.LA(1);

                   	 
                   	int index93_292 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred161_Sql()) ) { s = 14; }

                   	else if ( (true) ) { s = 22; }

                   	 
                   	input.Seek(index93_292);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 10 : 
                   	int LA93_305 = input.LA(1);

                   	 
                   	int index93_305 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred161_Sql()) ) { s = 14; }

                   	else if ( (true) ) { s = 22; }

                   	 
                   	input.Seek(index93_305);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae93 =
            new NoViableAltException(dfa.Description, 93, _s, input);
        dfa.Error(nvae93);
        throw nvae93;
    }
    const string DFA92_eotS =
        "\x2f\uffff";
    const string DFA92_eofS =
        "\x2f\uffff";
    const string DFA92_minS =
        "\x01\x28\x01\uffff\x01\x28\x15\uffff\x02\x00\x15\uffff";
    const string DFA92_maxS =
        "\x01\u012a\x01\uffff\x01\u012a\x15\uffff\x02\x00\x15\uffff";
    const string DFA92_acceptS =
        "\x01\uffff\x01\x01\x01\uffff\x01\x02\x2b\uffff";
    const string DFA92_specialS =
        "\x01\x00\x17\uffff\x01\x01\x01\x02\x15\uffff}>";
    static readonly string[] DFA92_transitionS = {
            "\x01\x03\x01\uffff\x01\x03\x02\uffff\x01\x03\x05\uffff\x02"+
            "\x03\x08\uffff\x01\x03\x06\uffff\x01\x03\x03\uffff\x02\x03\x0f"+
            "\uffff\x01\x03\x09\uffff\x04\x03\x04\uffff\x01\x03\x09\uffff"+
            "\x01\x03\x04\uffff\x01\x03\x09\uffff\x02\x03\x02\uffff\x01\x03"+
            "\x03\uffff\x03\x03\x02\uffff\x01\x03\x02\uffff\x01\x03\x0e\uffff"+
            "\x01\x03\x09\uffff\x01\x03\x01\uffff\x02\x03\x01\uffff\x01\x03"+
            "\x02\uffff\x02\x03\x05\uffff\x02\x03\x01\uffff\x01\x03\x01\uffff"+
            "\x02\x03\x03\uffff\x01\x01\x02\x03\x05\uffff\x03\x03\x02\uffff"+
            "\x01\x03\x0b\uffff\x01\x03\x05\uffff\x01\x03\x06\uffff\x24\x03"+
            "\x01\uffff\x01\x02\x02\uffff\x01\x03\x01\uffff\x01\x03\x03\uffff"+
            "\x02\x03\x06\uffff\x09\x03",
            "",
            "\x01\x03\x01\uffff\x01\x03\x02\uffff\x01\x03\x05\uffff\x02"+
            "\x03\x08\uffff\x01\x03\x06\uffff\x01\x03\x03\uffff\x02\x03\x0f"+
            "\uffff\x01\x03\x09\uffff\x04\x03\x04\uffff\x01\x03\x09\uffff"+
            "\x01\x03\x04\uffff\x01\x03\x09\uffff\x02\x03\x02\uffff\x01\x03"+
            "\x03\uffff\x03\x03\x02\uffff\x01\x03\x02\uffff\x01\x03\x0e\uffff"+
            "\x01\x03\x09\uffff\x01\x03\x01\uffff\x02\x03\x01\uffff\x01\x03"+
            "\x02\uffff\x02\x03\x05\uffff\x02\x03\x01\uffff\x01\x03\x01\uffff"+
            "\x02\x03\x03\uffff\x01\x18\x02\x03\x05\uffff\x03\x03\x02\uffff"+
            "\x01\x03\x0b\uffff\x01\x03\x05\uffff\x01\x03\x06\uffff\x24\x03"+
            "\x01\uffff\x01\x19\x02\uffff\x01\x03\x01\uffff\x01\x03\x03\uffff"+
            "\x02\x03\x06\uffff\x09\x03",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA92_eot = DFA.UnpackEncodedString(DFA92_eotS);
    static readonly short[] DFA92_eof = DFA.UnpackEncodedString(DFA92_eofS);
    static readonly char[] DFA92_min = DFA.UnpackEncodedStringToUnsignedChars(DFA92_minS);
    static readonly char[] DFA92_max = DFA.UnpackEncodedStringToUnsignedChars(DFA92_maxS);
    static readonly short[] DFA92_accept = DFA.UnpackEncodedString(DFA92_acceptS);
    static readonly short[] DFA92_special = DFA.UnpackEncodedString(DFA92_specialS);
    static readonly short[][] DFA92_transition = DFA.UnpackEncodedStringArray(DFA92_transitionS);

    protected class DFA92 : DFA
    {
        public DFA92(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 92;
            this.eot = DFA92_eot;
            this.eof = DFA92_eof;
            this.min = DFA92_min;
            this.max = DFA92_max;
            this.accept = DFA92_accept;
            this.special = DFA92_special;
            this.transition = DFA92_transition;

        }

        override public string Description
        {
            get { return "819:15: ( ( selectStatement )=> selectStatement | expression )"; }
        }

    }


    protected internal int DFA92_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA92_0 = input.LA(1);

                   	 
                   	int index92_0 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (LA92_0 == SELECT) && (synpred162_Sql()) ) { s = 1; }

                   	else if ( (LA92_0 == LPAREN) ) { s = 2; }

                   	else if ( (LA92_0 == AUTO || LA92_0 == BASE64 || LA92_0 == BINARY || (LA92_0 >= CASE && LA92_0 <= CAST) || LA92_0 == CONCAT || LA92_0 == CUBE || (LA92_0 >= CURRENT_TIMESTAMP && LA92_0 <= CURRENT_USER) || LA92_0 == ELEMENTS || (LA92_0 >= EXPAND && LA92_0 <= FASTFIRSTROW) || LA92_0 == FORCE || LA92_0 == HASH || LA92_0 == IDENTITYCOL || (LA92_0 >= KEEP && LA92_0 <= KEEPFIXED) || LA92_0 == LEFT || (LA92_0 >= LOOP && LA92_0 <= MERGE) || LA92_0 == NOLOCK || LA92_0 == NULL || LA92_0 == PAGLOCK || LA92_0 == RAW || (LA92_0 >= READCOMMITED && LA92_0 <= READPAST) || LA92_0 == READUNCOMMITED || (LA92_0 >= REMOTE && LA92_0 <= REPEATABLEREAD) || (LA92_0 >= RIGHT && LA92_0 <= ROBUST) || LA92_0 == ROLLUP || (LA92_0 >= ROWGUIDCOL && LA92_0 <= ROWLOCK) || (LA92_0 >= SERIALIZABLE && LA92_0 <= SESSION_USER) || (LA92_0 >= SYSTEM_USER && LA92_0 <= TABLOCKX) || LA92_0 == TIES || LA92_0 == UPDLOCK || LA92_0 == VIEWS || (LA92_0 >= XLOCK && LA92_0 <= F_VERSION) || LA92_0 == Integer || LA92_0 == Variable || (LA92_0 >= PLUS && LA92_0 <= MINUS) || (LA92_0 >= UnicodeStringLiteral && LA92_0 <= TILDE)) ) { s = 3; }

                   	 
                   	input.Seek(index92_0);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 1 : 
                   	int LA92_24 = input.LA(1);

                   	 
                   	int index92_24 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred162_Sql()) ) { s = 1; }

                   	else if ( (true) ) { s = 3; }

                   	 
                   	input.Seek(index92_24);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 2 : 
                   	int LA92_25 = input.LA(1);

                   	 
                   	int index92_25 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred162_Sql()) ) { s = 1; }

                   	else if ( (true) ) { s = 3; }

                   	 
                   	input.Seek(index92_25);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae92 =
            new NoViableAltException(dfa.Description, 92, _s, input);
        dfa.Error(nvae92);
        throw nvae92;
    }
    const string DFA94_eotS =
        "\x44\uffff";
    const string DFA94_eofS =
        "\x01\x02\x43\uffff";
    const string DFA94_minS =
        "\x01\x23\x43\uffff";
    const string DFA94_maxS =
        "\x01\u0132\x43\uffff";
    const string DFA94_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x41\uffff";
    const string DFA94_specialS =
        "\x44\uffff}>";
    static readonly string[] DFA94_transitionS = {
            "\x01\x02\x01\uffff\x02\x02\x01\uffff\x01\x02\x01\uffff\x01"+
            "\x02\x01\uffff\x02\x02\x05\uffff\x02\x02\x04\uffff\x01\x01\x02"+
            "\uffff\x02\x02\x01\uffff\x01\x02\x03\uffff\x02\x02\x03\uffff"+
            "\x02\x02\x08\uffff\x01\x02\x06\uffff\x03\x02\x01\uffff\x02\x02"+
            "\x04\uffff\x04\x02\x03\uffff\x02\x02\x01\uffff\x01\x02\x01\uffff"+
            "\x02\x02\x03\uffff\x03\x02\x03\uffff\x01\x02\x01\uffff\x01\x02"+
            "\x01\uffff\x01\x02\x01\uffff\x06\x02\x02\uffff\x02\x02\x02\uffff"+
            "\x03\x02\x02\uffff\x01\x02\x01\uffff\x02\x02\x03\uffff\x01\x02"+
            "\x05\uffff\x03\x02\x02\uffff\x02\x02\x08\uffff\x01\x02\x01\uffff"+
            "\x02\x02\x01\uffff\x01\x02\x02\uffff\x02\x02\x05\uffff\x02\x02"+
            "\x01\uffff\x01\x02\x01\uffff\x02\x02\x04\uffff\x02\x02\x05\uffff"+
            "\x03\x02\x01\uffff\x02\x02\x07\uffff\x01\x02\x03\uffff\x01\x02"+
            "\x05\uffff\x01\x02\x01\uffff\x02\x02\x01\uffff\x01\x02\x01\uffff"+
            "\x2b\x02\x01\uffff\x01\x02\x01\uffff\x07\x02\x01\uffff\x11\x02",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA94_eot = DFA.UnpackEncodedString(DFA94_eotS);
    static readonly short[] DFA94_eof = DFA.UnpackEncodedString(DFA94_eofS);
    static readonly char[] DFA94_min = DFA.UnpackEncodedStringToUnsignedChars(DFA94_minS);
    static readonly char[] DFA94_max = DFA.UnpackEncodedStringToUnsignedChars(DFA94_maxS);
    static readonly short[] DFA94_accept = DFA.UnpackEncodedString(DFA94_acceptS);
    static readonly short[] DFA94_special = DFA.UnpackEncodedString(DFA94_specialS);
    static readonly short[][] DFA94_transition = DFA.UnpackEncodedStringArray(DFA94_transitionS);

    protected class DFA94 : DFA
    {
        public DFA94(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 94;
            this.eot = DFA94_eot;
            this.eof = DFA94_eof;
            this.min = DFA94_min;
            this.max = DFA94_max;
            this.accept = DFA94_accept;
            this.special = DFA94_special;
            this.transition = DFA94_transition;

        }

        override public string Description
        {
            get { return "829:5: ( collate )?"; }
        }

    }

    const string DFA99_eotS =
        "\x21\uffff";
    const string DFA99_eofS =
        "\x0f\uffff\x01\x01\x11\uffff";
    const string DFA99_minS =
        "\x01\x21\x0e\uffff\x01\x39\x11\uffff";
    const string DFA99_maxS =
        "\x01\u012a\x0e\uffff\x01\u0120\x11\uffff";
    const string DFA99_acceptS =
        "\x01\uffff\x01\x01\x15\uffff\x01\x02\x01\x03\x01\uffff\x01\x04"+
        "\x06\uffff";
    const string DFA99_specialS =
        "\x21\uffff}>";
    static readonly string[] DFA99_transitionS = {
            "\x01\x18\x06\uffff\x01\x01\x01\uffff\x01\x01\x02\uffff\x01"+
            "\x01\x05\uffff\x02\x01\x08\uffff\x01\x01\x06\uffff\x01\x01\x03"+
            "\uffff\x02\x01\x0a\uffff\x01\x18\x04\uffff\x01\x01\x09\uffff"+
            "\x04\x01\x04\uffff\x01\x01\x09\uffff\x01\x01\x04\uffff\x01\x01"+
            "\x09\uffff\x02\x01\x02\uffff\x01\x01\x03\uffff\x03\x01\x02\uffff"+
            "\x01\x01\x02\uffff\x01\x01\x0e\uffff\x01\x01\x09\uffff\x01\x01"+
            "\x01\uffff\x02\x01\x01\uffff\x01\x01\x02\uffff\x02\x01\x05\uffff"+
            "\x02\x01\x01\uffff\x01\x01\x01\uffff\x02\x01\x04\uffff\x02\x01"+
            "\x05\uffff\x03\x01\x02\uffff\x01\x01\x0b\uffff\x01\x01\x05\uffff"+
            "\x01\x01\x06\uffff\x24\x01\x01\uffff\x01\x01\x02\uffff\x01\x01"+
            "\x01\x17\x01\x0f\x03\uffff\x02\x01\x06\uffff\x09\x01",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\x01\u00d8\uffff\x02\x01\x01\uffff\x01\x01\x02\uffff\x01"+
            "\x1a\x01\uffff\x07\x01",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA99_eot = DFA.UnpackEncodedString(DFA99_eotS);
    static readonly short[] DFA99_eof = DFA.UnpackEncodedString(DFA99_eofS);
    static readonly char[] DFA99_min = DFA.UnpackEncodedStringToUnsignedChars(DFA99_minS);
    static readonly char[] DFA99_max = DFA.UnpackEncodedStringToUnsignedChars(DFA99_maxS);
    static readonly short[] DFA99_accept = DFA.UnpackEncodedString(DFA99_acceptS);
    static readonly short[] DFA99_special = DFA.UnpackEncodedString(DFA99_specialS);
    static readonly short[][] DFA99_transition = DFA.UnpackEncodedStringArray(DFA99_transitionS);

    protected class DFA99 : DFA
    {
        public DFA99(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 99;
            this.eot = DFA99_eot;
            this.eof = DFA99_eof;
            this.min = DFA99_min;
            this.max = DFA99_max;
            this.accept = DFA99_accept;
            this.special = DFA99_special;
            this.transition = DFA99_transition;

        }

        override public string Description
        {
            get { return "840:1: functionArg : ( expression ( COMMA expression )* -> ^( ARG ( expression )+ ) | STAR -> ^( ARG STAR ) | (mod= ALL | mod= DISTINCT ) ( STAR | expression ) -> ^( ARG $mod ( STAR )? ( expression )? ) | varAssign ( COMMA varAssign )* -> ^( ARG ( varAssign )+ ) );"; }
        }

    }

    const string DFA97_eotS =
        "\x18\uffff";
    const string DFA97_eofS =
        "\x18\uffff";
    const string DFA97_minS =
        "\x01\x28\x17\uffff";
    const string DFA97_maxS =
        "\x01\u012a\x17\uffff";
    const string DFA97_acceptS =
        "\x01\uffff\x01\x01\x01\x02\x15\uffff";
    const string DFA97_specialS =
        "\x18\uffff}>";
    static readonly string[] DFA97_transitionS = {
            "\x01\x02\x01\uffff\x01\x02\x02\uffff\x01\x02\x05\uffff\x02"+
            "\x02\x08\uffff\x01\x02\x06\uffff\x01\x02\x03\uffff\x02\x02\x0f"+
            "\uffff\x01\x02\x09\uffff\x04\x02\x04\uffff\x01\x02\x09\uffff"+
            "\x01\x02\x04\uffff\x01\x02\x09\uffff\x02\x02\x02\uffff\x01\x02"+
            "\x03\uffff\x03\x02\x02\uffff\x01\x02\x02\uffff\x01\x02\x0e\uffff"+
            "\x01\x02\x09\uffff\x01\x02\x01\uffff\x02\x02\x01\uffff\x01\x02"+
            "\x02\uffff\x02\x02\x05\uffff\x02\x02\x01\uffff\x01\x02\x01\uffff"+
            "\x02\x02\x04\uffff\x02\x02\x05\uffff\x03\x02\x02\uffff\x01\x02"+
            "\x0b\uffff\x01\x02\x05\uffff\x01\x02\x06\uffff\x24\x02\x01\uffff"+
            "\x01\x02\x02\uffff\x01\x02\x01\x01\x01\x02\x03\uffff\x02\x02"+
            "\x06\uffff\x09\x02",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA97_eot = DFA.UnpackEncodedString(DFA97_eotS);
    static readonly short[] DFA97_eof = DFA.UnpackEncodedString(DFA97_eofS);
    static readonly char[] DFA97_min = DFA.UnpackEncodedStringToUnsignedChars(DFA97_minS);
    static readonly char[] DFA97_max = DFA.UnpackEncodedStringToUnsignedChars(DFA97_maxS);
    static readonly short[] DFA97_accept = DFA.UnpackEncodedString(DFA97_acceptS);
    static readonly short[] DFA97_special = DFA.UnpackEncodedString(DFA97_specialS);
    static readonly short[][] DFA97_transition = DFA.UnpackEncodedStringArray(DFA97_transitionS);

    protected class DFA97 : DFA
    {
        public DFA97(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 97;
            this.eot = DFA97_eot;
            this.eof = DFA97_eof;
            this.min = DFA97_min;
            this.max = DFA97_max;
            this.accept = DFA97_accept;
            this.special = DFA97_special;
            this.transition = DFA97_transition;

        }

        override public string Description
        {
            get { return "845:32: ( STAR | expression )"; }
        }

    }

    const string DFA101_eotS =
        "\x1b\uffff";
    const string DFA101_eofS =
        "\x1b\uffff";
    const string DFA101_minS =
        "\x01\x21\x1a\uffff";
    const string DFA101_maxS =
        "\x01\u012a\x1a\uffff";
    const string DFA101_acceptS =
        "\x01\uffff\x01\x01\x18\uffff\x01\x02";
    const string DFA101_specialS =
        "\x1b\uffff}>";
    static readonly string[] DFA101_transitionS = {
            "\x01\x01\x06\uffff\x01\x01\x01\uffff\x01\x01\x02\uffff\x01"+
            "\x01\x05\uffff\x02\x01\x08\uffff\x01\x01\x06\uffff\x01\x01\x03"+
            "\uffff\x02\x01\x0a\uffff\x01\x01\x04\uffff\x01\x01\x09\uffff"+
            "\x04\x01\x04\uffff\x01\x01\x09\uffff\x01\x01\x04\uffff\x01\x01"+
            "\x09\uffff\x02\x01\x02\uffff\x01\x01\x03\uffff\x03\x01\x02\uffff"+
            "\x01\x01\x02\uffff\x01\x01\x0e\uffff\x01\x01\x09\uffff\x01\x01"+
            "\x01\uffff\x02\x01\x01\uffff\x01\x01\x02\uffff\x02\x01\x05\uffff"+
            "\x02\x01\x01\uffff\x01\x01\x01\uffff\x02\x01\x04\uffff\x02\x01"+
            "\x05\uffff\x03\x01\x02\uffff\x01\x01\x0b\uffff\x01\x01\x05\uffff"+
            "\x01\x01\x06\uffff\x24\x01\x01\uffff\x01\x01\x01\x1a\x01\uffff"+
            "\x03\x01\x03\uffff\x02\x01\x06\uffff\x09\x01",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA101_eot = DFA.UnpackEncodedString(DFA101_eotS);
    static readonly short[] DFA101_eof = DFA.UnpackEncodedString(DFA101_eofS);
    static readonly char[] DFA101_min = DFA.UnpackEncodedStringToUnsignedChars(DFA101_minS);
    static readonly char[] DFA101_max = DFA.UnpackEncodedStringToUnsignedChars(DFA101_maxS);
    static readonly short[] DFA101_accept = DFA.UnpackEncodedString(DFA101_acceptS);
    static readonly short[] DFA101_special = DFA.UnpackEncodedString(DFA101_specialS);
    static readonly short[][] DFA101_transition = DFA.UnpackEncodedStringArray(DFA101_transitionS);

    protected class DFA101 : DFA
    {
        public DFA101(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 101;
            this.eot = DFA101_eot;
            this.eof = DFA101_eof;
            this.min = DFA101_min;
            this.max = DFA101_max;
            this.accept = DFA101_accept;
            this.special = DFA101_special;
            this.transition = DFA101_transition;

        }

        override public string Description
        {
            get { return "864:12: (arg= functionArg )?"; }
        }

    }

    const string DFA104_eotS =
        "\x18\uffff";
    const string DFA104_eofS =
        "\x18\uffff";
    const string DFA104_minS =
        "\x01\x28\x17\uffff";
    const string DFA104_maxS =
        "\x01\u012a\x17\uffff";
    const string DFA104_acceptS =
        "\x01\uffff\x01\x01\x15\uffff\x01\x02";
    const string DFA104_specialS =
        "\x18\uffff}>";
    static readonly string[] DFA104_transitionS = {
            "\x01\x01\x01\uffff\x01\x01\x02\uffff\x01\x01\x05\uffff\x02"+
            "\x01\x08\uffff\x01\x01\x06\uffff\x01\x01\x03\uffff\x02\x01\x0f"+
            "\uffff\x01\x01\x09\uffff\x04\x01\x04\uffff\x01\x01\x09\uffff"+
            "\x01\x01\x04\uffff\x01\x01\x09\uffff\x02\x01\x02\uffff\x01\x01"+
            "\x03\uffff\x03\x01\x02\uffff\x01\x01\x02\uffff\x01\x01\x0e\uffff"+
            "\x01\x01\x09\uffff\x01\x01\x01\uffff\x02\x01\x01\uffff\x01\x01"+
            "\x02\uffff\x02\x01\x05\uffff\x02\x01\x01\uffff\x01\x01\x01\uffff"+
            "\x02\x01\x04\uffff\x02\x01\x05\uffff\x03\x01\x02\uffff\x01\x01"+
            "\x0b\uffff\x01\x01\x05\uffff\x01\x01\x01\uffff\x01\x17\x04\uffff"+
            "\x24\x01\x01\uffff\x01\x01\x02\uffff\x01\x01\x01\uffff\x01\x01"+
            "\x03\uffff\x02\x01\x06\uffff\x09\x01",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA104_eot = DFA.UnpackEncodedString(DFA104_eotS);
    static readonly short[] DFA104_eof = DFA.UnpackEncodedString(DFA104_eofS);
    static readonly char[] DFA104_min = DFA.UnpackEncodedStringToUnsignedChars(DFA104_minS);
    static readonly char[] DFA104_max = DFA.UnpackEncodedStringToUnsignedChars(DFA104_maxS);
    static readonly short[] DFA104_accept = DFA.UnpackEncodedString(DFA104_acceptS);
    static readonly short[] DFA104_special = DFA.UnpackEncodedString(DFA104_specialS);
    static readonly short[][] DFA104_transition = DFA.UnpackEncodedStringArray(DFA104_transitionS);

    protected class DFA104 : DFA
    {
        public DFA104(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 104;
            this.eot = DFA104_eot;
            this.eof = DFA104_eof;
            this.min = DFA104_min;
            this.max = DFA104_max;
            this.accept = DFA104_accept;
            this.special = DFA104_special;
            this.transition = DFA104_transition;

        }

        override public string Description
        {
            get { return "880:12: (t= expression (cx+= caseExpWhen )+ | (cx+= caseSrchWhen )+ )"; }
        }

    }

    const string DFA109_eotS =
        "\x4b\uffff";
    const string DFA109_eofS =
        "\x01\x01\x4a\uffff";
    const string DFA109_minS =
        "\x01\x23\x44\uffff\x01\x28\x05\uffff";
    const string DFA109_maxS =
        "\x01\u0132\x44\uffff\x01\u0125\x05\uffff";
    const string DFA109_acceptS =
        "\x01\uffff\x01\x03\x44\uffff\x01\x02\x01\x01\x03\uffff";
    const string DFA109_specialS =
        "\x45\uffff\x01\x00\x05\uffff}>";
    static readonly string[] DFA109_transitionS = {
            "\x01\x01\x01\uffff\x02\x01\x01\uffff\x01\x01\x01\uffff\x01"+
            "\x01\x01\uffff\x02\x01\x05\uffff\x02\x01\x04\uffff\x01\x01\x02"+
            "\uffff\x02\x01\x01\uffff\x01\x01\x03\uffff\x02\x01\x03\uffff"+
            "\x02\x01\x08\uffff\x01\x01\x06\uffff\x03\x01\x01\uffff\x02\x01"+
            "\x04\uffff\x04\x01\x03\uffff\x02\x01\x01\uffff\x01\x01\x01\uffff"+
            "\x02\x01\x03\uffff\x03\x01\x03\uffff\x01\x01\x01\uffff\x01\x01"+
            "\x01\uffff\x01\x01\x01\uffff\x06\x01\x02\uffff\x02\x01\x02\uffff"+
            "\x03\x01\x02\uffff\x01\x01\x01\uffff\x02\x01\x03\uffff\x01\x01"+
            "\x05\uffff\x03\x01\x02\uffff\x02\x01\x08\uffff\x01\x01\x01\uffff"+
            "\x02\x01\x01\uffff\x01\x01\x02\uffff\x02\x01\x05\uffff\x02\x01"+
            "\x01\uffff\x01\x01\x01\uffff\x02\x01\x04\uffff\x02\x01\x05\uffff"+
            "\x03\x01\x01\uffff\x02\x01\x07\uffff\x01\x01\x03\uffff\x01\x01"+
            "\x05\uffff\x01\x01\x01\uffff\x02\x01\x01\uffff\x01\x01\x01\uffff"+
            "\x2b\x01\x01\uffff\x09\x01\x01\x45\x11\x01",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\x47\x01\uffff\x01\x47\x02\uffff\x01\x47\x06\uffff\x01"+
            "\x47\x08\uffff\x01\x47\x06\uffff\x01\x47\x14\uffff\x01\x47\x09"+
            "\uffff\x04\x47\x04\uffff\x01\x47\x09\uffff\x01\x47\x04\uffff"+
            "\x01\x47\x09\uffff\x02\x47\x06\uffff\x03\x47\x02\uffff\x01\x47"+
            "\x11\uffff\x01\x47\x09\uffff\x01\x47\x01\uffff\x02\x47\x01\uffff"+
            "\x01\x47\x02\uffff\x02\x47\x06\uffff\x01\x47\x01\uffff\x01\x47"+
            "\x01\uffff\x02\x47\x04\uffff\x01\x47\x07\uffff\x02\x47\x02\uffff"+
            "\x01\x47\x0b\uffff\x01\x47\x05\uffff\x01\x47\x06\uffff\x03\x47"+
            "\x32\uffff\x01\x46\x02\uffff\x02\x47",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA109_eot = DFA.UnpackEncodedString(DFA109_eotS);
    static readonly short[] DFA109_eof = DFA.UnpackEncodedString(DFA109_eofS);
    static readonly char[] DFA109_min = DFA.UnpackEncodedStringToUnsignedChars(DFA109_minS);
    static readonly char[] DFA109_max = DFA.UnpackEncodedStringToUnsignedChars(DFA109_maxS);
    static readonly short[] DFA109_accept = DFA.UnpackEncodedString(DFA109_acceptS);
    static readonly short[] DFA109_special = DFA.UnpackEncodedString(DFA109_specialS);
    static readonly short[][] DFA109_transition = DFA.UnpackEncodedStringArray(DFA109_transitionS);

    protected class DFA109 : DFA
    {
        public DFA109(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 109;
            this.eot = DFA109_eot;
            this.eof = DFA109_eof;
            this.min = DFA109_min;
            this.max = DFA109_max;
            this.accept = DFA109_accept;
            this.special = DFA109_special;
            this.transition = DFA109_transition;

        }

        override public string Description
        {
            get { return "()* loopback of 903:18: ( DOT dbObjectName | ( DOT DOT )=> DOT DOT dbObjectName )*"; }
        }

    }


    protected internal int DFA109_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA109_69 = input.LA(1);

                   	 
                   	int index109_69 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (LA109_69 == DOT) && (synpred185_Sql()) ) { s = 70; }

                   	else if ( (LA109_69 == AUTO || LA109_69 == BASE64 || LA109_69 == BINARY || LA109_69 == CAST || LA109_69 == CONCAT || LA109_69 == CUBE || LA109_69 == ELEMENTS || (LA109_69 >= EXPAND && LA109_69 <= FASTFIRSTROW) || LA109_69 == FORCE || LA109_69 == HASH || LA109_69 == IDENTITYCOL || (LA109_69 >= KEEP && LA109_69 <= KEEPFIXED) || (LA109_69 >= LOOP && LA109_69 <= MERGE) || LA109_69 == NOLOCK || LA109_69 == PAGLOCK || LA109_69 == RAW || (LA109_69 >= READCOMMITED && LA109_69 <= READPAST) || LA109_69 == READUNCOMMITED || (LA109_69 >= REMOTE && LA109_69 <= REPEATABLEREAD) || LA109_69 == ROBUST || LA109_69 == ROLLUP || (LA109_69 >= ROWGUIDCOL && LA109_69 <= ROWLOCK) || LA109_69 == SERIALIZABLE || (LA109_69 >= TABLOCK && LA109_69 <= TABLOCKX) || LA109_69 == TIES || LA109_69 == UPDLOCK || LA109_69 == VIEWS || (LA109_69 >= XLOCK && LA109_69 <= XMLDATA) || (LA109_69 >= NonQuotedIdentifier && LA109_69 <= QuotedIdentifier)) ) { s = 71; }

                   	 
                   	input.Seek(index109_69);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae109 =
            new NoViableAltException(dfa.Description, 109, _s, input);
        dfa.Error(nvae109);
        throw nvae109;
    }
 

    public static readonly BitSet FOLLOW_selectStatement_in_statement3277 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000010000UL});
    public static readonly BitSet FOLLOW_SEMICOLON_in_statement3280 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000010000UL});
    public static readonly BitSet FOLLOW_EOF_in_statement3284 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_queryExpression_in_selectStatement3328 = new BitSet(new ulong[]{0x1000000000000002UL,0x0000040000000000UL,0x0000000040000000UL});
    public static readonly BitSet FOLLOW_computeClause_in_selectStatement3335 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000040000000000UL,0x0000000040000000UL});
    public static readonly BitSet FOLLOW_forClause_in_selectStatement3344 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000040000000UL});
    public static readonly BitSet FOLLOW_optionClause_in_selectStatement3353 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_unionExceptQueryExpression_in_queryExpression3400 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000100000000UL});
    public static readonly BitSet FOLLOW_orderByClause_in_queryExpression3403 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_intersectQueryExpression_in_unionExceptQueryExpression3444 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000040000000UL,0x0000000000000000UL,0x0000000008000000UL});
    public static readonly BitSet FOLLOW_set_in_unionExceptQueryExpression3447 = new BitSet(new ulong[]{0x0000000200000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000040UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_ALL_in_unionExceptQueryExpression3455 = new BitSet(new ulong[]{0x0000000200000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000040UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_intersectQueryExpression_in_unionExceptQueryExpression3459 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000040000000UL,0x0000000000000000UL,0x0000000008000000UL});
    public static readonly BitSet FOLLOW_subQueryExpression_in_intersectQueryExpression3480 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000001UL});
    public static readonly BitSet FOLLOW_INTERSECT_in_intersectQueryExpression3483 = new BitSet(new ulong[]{0x0000000200000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000040UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_ALL_in_intersectQueryExpression3487 = new BitSet(new ulong[]{0x0000000200000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000040UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_subQueryExpression_in_intersectQueryExpression3491 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000001UL});
    public static readonly BitSet FOLLOW_querySpecification_in_subQueryExpression3516 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_LPAREN_in_subQueryExpression3533 = new BitSet(new ulong[]{0x0000000200000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000040UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_queryExpression_in_subQueryExpression3535 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_subQueryExpression3537 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_selectClause_in_querySpecification3604 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000800000000000UL});
    public static readonly BitSet FOLLOW_fromClause_in_querySpecification3613 = new BitSet(new ulong[]{0x0000000000000002UL,0x0010000000000000UL,0x0000000000000000UL,0x0000010000000000UL});
    public static readonly BitSet FOLLOW_whereClause_in_querySpecification3621 = new BitSet(new ulong[]{0x0000000000000002UL,0x0010000000000000UL});
    public static readonly BitSet FOLLOW_groupByClause_in_querySpecification3630 = new BitSet(new ulong[]{0x0000000000000002UL,0x0040000000000000UL});
    public static readonly BitSet FOLLOW_havingClause_in_querySpecification3633 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_SELECT_in_selectClause3688 = new BitSet(new ulong[]{0x2018250200000000UL,0x0420087802100310UL,0xB065A00800127130UL,0xFFFFF0208029C186UL,0x000007FC0C72FFFFUL});
    public static readonly BitSet FOLLOW_ALL_in_selectClause3693 = new BitSet(new ulong[]{0x2018250200000000UL,0x0420087802100310UL,0xB065A00800127130UL,0xFFFFF0208029C186UL,0x000007FC0C72FFFFUL});
    public static readonly BitSet FOLLOW_DISTINCT_in_selectClause3699 = new BitSet(new ulong[]{0x2018250200000000UL,0x0420087802100310UL,0xB065A00800127130UL,0xFFFFF0208029C186UL,0x000007FC0C72FFFFUL});
    public static readonly BitSet FOLLOW_TOP_in_selectClause3704 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_selectClause3708 = new BitSet(new ulong[]{0x2018250200000000UL,0x0420087802100310UL,0xB065A01800127130UL,0xFFFFF4208029C186UL,0x000007FC0C72FFFFUL});
    public static readonly BitSet FOLLOW_PERCENT_in_selectClause3711 = new BitSet(new ulong[]{0x2018250200000000UL,0x0420087802100310UL,0xB065A00800127130UL,0xFFFFF4208029C186UL,0x000007FC0C72FFFFUL});
    public static readonly BitSet FOLLOW_WITH_in_selectClause3716 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_TIES_in_selectClause3718 = new BitSet(new ulong[]{0x2018250200000000UL,0x0420087802100310UL,0xB065A00800127130UL,0xFFFFF0208029C186UL,0x000007FC0C72FFFFUL});
    public static readonly BitSet FOLLOW_selectItem_in_selectClause3725 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000002UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_COMMA_in_selectClause3728 = new BitSet(new ulong[]{0x2018250200000000UL,0x0420087802100310UL,0xB065A00800127130UL,0xFFFFF0208029C186UL,0x000007FC0C72FFFFUL});
    public static readonly BitSet FOLLOW_selectItem_in_selectClause3730 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000002UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_INTO_in_selectClause3735 = new BitSet(new ulong[]{0x2010250000000000UL,0x0420087802000010UL,0xA065A00800027030UL,0x0000702080098086UL,0x0000003C00000000UL});
    public static readonly BitSet FOLLOW_dbObject_in_selectClause3737 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_WHERE_in_whereClause3788 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087A02000310UL,0xB065A008001A7130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_searchCondition_in_whereClause3790 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_expression_in_orderByItem3819 = new BitSet(new ulong[]{0x0000004000000002UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_ASC_in_orderByItem3824 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_DESC_in_orderByItem3830 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_ORDER_in_orderByClause3865 = new BitSet(new ulong[]{0x0002000000000000UL});
    public static readonly BitSet FOLLOW_BY_in_orderByClause3867 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_orderByItem_in_orderByClause3869 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_COMMA_in_orderByClause3872 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_orderByItem_in_orderByClause3874 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_GROUP_in_groupByClause3906 = new BitSet(new ulong[]{0x0002000000000000UL});
    public static readonly BitSet FOLLOW_BY_in_groupByClause3908 = new BitSet(new ulong[]{0x2018250200000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_ALL_in_groupByClause3911 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_groupByClause3915 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000040000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_COMMA_in_groupByClause3918 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_groupByClause3920 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000040000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_WITH_in_groupByClause3925 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000010UL,0x8000000000000000UL});
    public static readonly BitSet FOLLOW_CUBE_in_groupByClause3928 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_ROLLUP_in_groupByClause3932 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_HAVING_in_havingClause3970 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087A02000310UL,0xB065A008001A7130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_searchCondition_in_havingClause3972 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_OPTION_in_optionClause4001 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_LPAREN_in_optionClause4003 = new BitSet(new ulong[]{0x2000000000000000UL,0x0020082800000000UL,0x2000000100007030UL});
    public static readonly BitSet FOLLOW_queryHint_in_optionClause4005 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x00000000000C0000UL});
    public static readonly BitSet FOLLOW_COMMA_in_optionClause4008 = new BitSet(new ulong[]{0x2000000000000000UL,0x0020082800000000UL,0x2000000100007030UL});
    public static readonly BitSet FOLLOW_queryHint_in_optionClause4010 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x00000000000C0000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_optionClause4014 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_queryHint4050 = new BitSet(new ulong[]{0x0000000000000000UL,0x0010000000000000UL});
    public static readonly BitSet FOLLOW_GROUP_in_queryHint4058 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_queryHint4066 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000008000000UL});
    public static readonly BitSet FOLLOW_UNION_in_queryHint4078 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_queryHint4086 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000008UL});
    public static readonly BitSet FOLLOW_JOIN_in_queryHint4098 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_FAST_in_queryHint4106 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000100000UL});
    public static readonly BitSet FOLLOW_Integer_in_queryHint4108 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_FORCE_in_queryHint4116 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000100000000UL});
    public static readonly BitSet FOLLOW_ORDER_in_queryHint4118 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_MAXDOP_in_queryHint4126 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000100000UL});
    public static readonly BitSet FOLLOW_Integer_in_queryHint4128 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_ROBUST_in_queryHint4136 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000002000000000UL});
    public static readonly BitSet FOLLOW_PLAN_in_queryHint4138 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_KEEP_in_queryHint4146 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000002000000000UL});
    public static readonly BitSet FOLLOW_PLAN_in_queryHint4148 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_KEEPFIXED_in_queryHint4156 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000002000000000UL});
    public static readonly BitSet FOLLOW_PLAN_in_queryHint4158 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_EXPAND_in_queryHint4166 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000002000000000UL});
    public static readonly BitSet FOLLOW_VIEWS_in_queryHint4168 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_FOR_in_forClause4189 = new BitSet(new ulong[]{0x0000800000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000200000000000UL});
    public static readonly BitSet FOLLOW_BROWSE_in_forClause4199 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_XML_in_forClause4207 = new BitSet(new ulong[]{0x0000010000000000UL,0x0000001000000000UL,0x0000200000000000UL});
    public static readonly BitSet FOLLOW_set_in_forClause4209 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_COMMA_in_forClause4222 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000400000000000UL});
    public static readonly BitSet FOLLOW_XMLDATA_in_forClause4224 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_COMMA_in_forClause4229 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000002000000UL});
    public static readonly BitSet FOLLOW_ELEMENTS_in_forClause4231 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_COMMA_in_forClause4236 = new BitSet(new ulong[]{0x0000200000000000UL});
    public static readonly BitSet FOLLOW_BINARY_in_forClause4238 = new BitSet(new ulong[]{0x0000040000000000UL});
    public static readonly BitSet FOLLOW_BASE64_in_forClause4240 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_COMPUTE_in_computeClause4268 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000003000000000UL});
    public static readonly BitSet FOLLOW_identifier_in_computeClause4279 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_LPAREN_in_computeClause4281 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_computeClause4283 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_computeClause4285 = new BitSet(new ulong[]{0x0002000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_COMMA_in_computeClause4292 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000003000000000UL});
    public static readonly BitSet FOLLOW_identifier_in_computeClause4294 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_LPAREN_in_computeClause4296 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_computeClause4298 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_computeClause4300 = new BitSet(new ulong[]{0x0002000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_BY_in_computeClause4309 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_computeClause4311 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_COMMA_in_computeClause4314 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_computeClause4316 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_andSearchCondition_in_searchCondition4334 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000080000000UL});
    public static readonly BitSet FOLLOW_OR_in_searchCondition4337 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087A02000310UL,0xB065A008001A7130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_andSearchCondition_in_searchCondition4340 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000080000000UL});
    public static readonly BitSet FOLLOW_negsubSearchCondition_in_andSearchCondition4355 = new BitSet(new ulong[]{0x0000000800000002UL});
    public static readonly BitSet FOLLOW_AND_in_andSearchCondition4359 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087A02000310UL,0xB065A008001A7130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_negsubSearchCondition_in_andSearchCondition4362 = new BitSet(new ulong[]{0x0000000800000002UL});
    public static readonly BitSet FOLLOW_NOT_in_negsubSearchCondition4382 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087A02000310UL,0xB065A008001A7130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_subSearchCondition_in_negsubSearchCondition4384 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_subSearchCondition_in_negsubSearchCondition4404 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_LPAREN_in_subSearchCondition4433 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087A02000310UL,0xB065A008001A7130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_searchCondition_in_subSearchCondition4444 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_subSearchCondition4448 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_predicate_in_subSearchCondition4463 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_expression_in_predicate4503 = new BitSet(new ulong[]{0x8000100000000000UL,0x1000200000000000UL,0x0000000000080204UL,0x0000000000000000UL,0x0007F80001000000UL});
    public static readonly BitSet FOLLOW_comparisonOperator_in_predicate4526 = new BitSet(new ulong[]{0x2018251200000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009D186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_predicate4544 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_ALL_in_predicate4561 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_SOME_in_predicate4567 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_ANY_in_predicate4573 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_LPAREN_in_predicate4576 = new BitSet(new ulong[]{0x0000000200000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000040UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_selectStatement_in_predicate4580 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_predicate4582 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_IS_in_predicate4674 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000180000UL});
    public static readonly BitSet FOLLOW_NOT_in_predicate4679 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000100000UL});
    public static readonly BitSet FOLLOW_NULL_in_predicate4683 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_NOT_in_predicate4744 = new BitSet(new ulong[]{0x0000100000000000UL,0x1000000000000000UL,0x0000000000000200UL});
    public static readonly BitSet FOLLOW_LIKE_in_predicate4760 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_predicate4764 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000020000000UL});
    public static readonly BitSet FOLLOW_ESCAPE_in_predicate4767 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_predicate4769 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_BETWEEN_in_predicate4835 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_predicate4839 = new BitSet(new ulong[]{0x0000000800000000UL});
    public static readonly BitSet FOLLOW_AND_in_predicate4841 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_predicate4845 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_IN_in_predicate4916 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_LPAREN_in_predicate4918 = new BitSet(new ulong[]{0x2018250200000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C1C6UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_selectStatement_in_predicate4946 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_expression_in_predicate5025 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x00000000000C0000UL});
    public static readonly BitSet FOLLOW_COMMA_in_predicate5028 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_predicate5032 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x00000000000C0000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_predicate5104 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_CONTAINS_in_predicate5126 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_LPAREN_in_predicate5128 = new BitSet(new ulong[]{0x2010250000000000UL,0x0420087802000010UL,0xA065A00800027030UL,0x0000702080098086UL,0x0000003C00200000UL});
    public static readonly BitSet FOLLOW_dbObject_in_predicate5131 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_STAR_in_predicate5135 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_COMMA_in_predicate5138 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000C00400000UL});
    public static readonly BitSet FOLLOW_stringLiteral_in_predicate5141 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_Variable_in_predicate5145 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_predicate5148 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_FREETEXT_in_predicate5158 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_LPAREN_in_predicate5160 = new BitSet(new ulong[]{0x2010250000000000UL,0x0420087802000010UL,0xA065A00800027030UL,0x0000702080098086UL,0x0000003C00200000UL});
    public static readonly BitSet FOLLOW_dbObject_in_predicate5163 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_STAR_in_predicate5167 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_COMMA_in_predicate5170 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000C00400000UL});
    public static readonly BitSet FOLLOW_stringLiteral_in_predicate5173 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_Variable_in_predicate5177 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_predicate5180 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_EXISTS_in_predicate5198 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_LPAREN_in_predicate5200 = new BitSet(new ulong[]{0x0000000200000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000040UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_selectStatement_in_predicate5204 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_predicate5206 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_STAR_in_selectItem5257 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_alias2_in_selectItem5309 = new BitSet(new ulong[]{0x2010250000000000UL,0x0420087802000010UL,0xA065A00800027030UL,0x0000702080098086UL,0x0000003C04020000UL});
    public static readonly BitSet FOLLOW_column_in_selectItem5311 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_alias2_in_selectItem5359 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_selectItem5361 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_alias2_in_selectItem5401 = new BitSet(new ulong[]{0x2010250000000000UL,0x0420087802000010UL,0xA065A00800027030UL,0x0000702080098086UL,0x0000003C04020000UL});
    public static readonly BitSet FOLLOW_column_in_selectItem5403 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_alias2_in_selectItem5443 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_selectItem5445 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_tableColumns_in_selectItem5497 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_column_in_selectItem5542 = new BitSet(new ulong[]{0x2010252000000002UL,0x0020087802000010UL,0xA065A00800027030UL,0x0000702080098084UL,0x0000003C00000000UL});
    public static readonly BitSet FOLLOW_alias1_in_selectItem5545 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_expression_in_selectItem5585 = new BitSet(new ulong[]{0x2010252000000002UL,0x0020087802000010UL,0xA065A00800027030UL,0x0000702080098084UL,0x0000003C00000000UL});
    public static readonly BitSet FOLLOW_alias1_in_selectItem5588 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_column_in_selectItem5631 = new BitSet(new ulong[]{0x2010252000000002UL,0x0020087802000010UL,0xA065A00800027030UL,0x0000702080098084UL,0x0000003C00000000UL});
    public static readonly BitSet FOLLOW_alias1_in_selectItem5634 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_expression_in_selectItem5665 = new BitSet(new ulong[]{0x2010252000000002UL,0x0020087802000010UL,0xA065A00800027030UL,0x0000702080098084UL,0x0000003C00000000UL});
    public static readonly BitSet FOLLOW_alias1_in_selectItem5668 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_FROM_in_fromClause5708 = new BitSet(new ulong[]{0x2010250000000000UL,0x0420087802000010UL,0xB065A00800027130UL,0x0000702080098086UL,0x0000003C00C20000UL});
    public static readonly BitSet FOLLOW_tableSource_in_fromClause5710 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_COMMA_in_fromClause5713 = new BitSet(new ulong[]{0x2010250000000000UL,0x0420087802000010UL,0xB065A00800027130UL,0x0000702080098086UL,0x0000003C00C20000UL});
    public static readonly BitSet FOLLOW_tableSource_in_fromClause5715 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_CROSS_in_joinType5750 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_INNER_in_joinType5774 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_LEFT_in_joinType5783 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000200000000UL});
    public static readonly BitSet FOLLOW_RIGHT_in_joinType5787 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000200000000UL});
    public static readonly BitSet FOLLOW_FULL_in_joinType5791 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000200000000UL});
    public static readonly BitSet FOLLOW_OUTER_in_joinType5797 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_ON_in_joinPred5841 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087A02000310UL,0xB065A008001A7130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_searchCondition_in_joinPred5843 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_joinedTables_in_tableSource5876 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_subTableSource_in_tableSource5894 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_LPAREN_in_subTableSource5923 = new BitSet(new ulong[]{0x2010250200000000UL,0x0420087802000010UL,0xB065A00800027130UL,0x00007020800980C6UL,0x0000003C00C20000UL});
    public static readonly BitSet FOLLOW_joinedTables_in_subTableSource5945 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_subTableSource5947 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_queryExpression_in_subTableSource5983 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_subTableSource5985 = new BitSet(new ulong[]{0x2010252000000000UL,0x0020087802000010UL,0xA065A00800027030UL,0x0000702080098084UL,0x0000003C00000000UL});
    public static readonly BitSet FOLLOW_alias1_in_subTableSource5987 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_function_in_subTableSource6040 = new BitSet(new ulong[]{0x2010252000000002UL,0x0020087802000010UL,0xA065A00800027030UL,0x0000702080098084UL,0x0000003C00000000UL});
    public static readonly BitSet FOLLOW_alias1_in_subTableSource6043 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_dbObject_in_subTableSource6074 = new BitSet(new ulong[]{0x2010252000000002UL,0x0020087802000010UL,0xA065A00800027030UL,0x0000742080098084UL,0x0000003C00020000UL});
    public static readonly BitSet FOLLOW_alias1_in_subTableSource6077 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000040000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_WITH_in_subTableSource6084 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_LPAREN_in_subTableSource6088 = new BitSet(new ulong[]{0x0000000000000000UL,0x2080004000000000UL,0x0045800800020000UL,0x0000100080018084UL});
    public static readonly BitSet FOLLOW_tableHint_in_subTableSource6090 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x00000000000C0000UL});
    public static readonly BitSet FOLLOW_COMMA_in_subTableSource6093 = new BitSet(new ulong[]{0x0000000000000000UL,0x2080004000000000UL,0x0045800800020000UL,0x0000100080018084UL});
    public static readonly BitSet FOLLOW_tableHint_in_subTableSource6095 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x00000000000C0000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_subTableSource6099 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_Variable_in_subTableSource6125 = new BitSet(new ulong[]{0x2010252000000002UL,0x0020087802000010UL,0xA065A00800027030UL,0x0000702080098084UL,0x0000003C00000000UL});
    public static readonly BitSet FOLLOW_alias1_in_subTableSource6128 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_COLON_in_subTableSource6160 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000800000UL});
    public static readonly BitSet FOLLOW_COLON_in_subTableSource6162 = new BitSet(new ulong[]{0x2010250000000000UL,0x0420087802000010UL,0xB065A00800027130UL,0x0000702080098086UL,0x0000003C00000000UL});
    public static readonly BitSet FOLLOW_function_in_subTableSource6164 = new BitSet(new ulong[]{0x2010252000000002UL,0x0020087802000010UL,0xA065A00800027030UL,0x0000702080098084UL,0x0000003C00000000UL});
    public static readonly BitSet FOLLOW_alias1_in_subTableSource6167 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_joinType_in_joinOp6210 = new BitSet(new ulong[]{0x0000000000000000UL,0x0020000000000000UL,0x0020000000005008UL});
    public static readonly BitSet FOLLOW_joinHint_in_joinOp6213 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000008UL});
    public static readonly BitSet FOLLOW_JOIN_in_joinOp6216 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_subTableSource_in_joinedTables6253 = new BitSet(new ulong[]{0x0000000000000000UL,0x4021000000000008UL,0x1020000000005108UL});
    public static readonly BitSet FOLLOW_joinOp_in_joinedTables6257 = new BitSet(new ulong[]{0x2010250000000000UL,0x0420087802000010UL,0xB065A00800027130UL,0x0000702080098086UL,0x0000003C00C20000UL});
    public static readonly BitSet FOLLOW_tableSource_in_joinedTables6260 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000001000000UL});
    public static readonly BitSet FOLLOW_joinPred_in_joinedTables6262 = new BitSet(new ulong[]{0x0000000000000002UL,0x4021000000000008UL,0x1020000000005108UL});
    public static readonly BitSet FOLLOW_set_in_joinHint0 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_INDEX_in_tableHint6335 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000001020000UL});
    public static readonly BitSet FOLLOW_LPAREN_in_tableHint6349 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000003000100000UL});
    public static readonly BitSet FOLLOW_identifier_in_tableHint6352 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x00000000000C0000UL});
    public static readonly BitSet FOLLOW_Integer_in_tableHint6356 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x00000000000C0000UL});
    public static readonly BitSet FOLLOW_COMMA_in_tableHint6361 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000003000100000UL});
    public static readonly BitSet FOLLOW_identifier_in_tableHint6364 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x00000000000C0000UL});
    public static readonly BitSet FOLLOW_Integer_in_tableHint6368 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x00000000000C0000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_tableHint6374 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_ASSIGNEQUAL_in_tableHint6386 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000003000000000UL});
    public static readonly BitSet FOLLOW_identifier_in_tableHint6388 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_FASTFIRSTROW_in_tableHint6410 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_HOLDLOCK_in_tableHint6418 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_NOLOCK_in_tableHint6426 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_PAGLOCK_in_tableHint6434 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_READCOMMITED_in_tableHint6442 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_READPAST_in_tableHint6450 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_READUNCOMMITED_in_tableHint6458 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_REPEATABLEREAD_in_tableHint6466 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_ROWLOCK_in_tableHint6474 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_SERIALIZABLE_in_tableHint6482 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_TABLOCK_in_tableHint6490 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_TABLOCKX_in_tableHint6498 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_UPDLOCK_in_tableHint6506 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_XLOCK_in_tableHint6514 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_COLLATE_in_collate6531 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000003000000000UL});
    public static readonly BitSet FOLLOW_identifier_in_collate6533 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_AS_in_alias16560 = new BitSet(new ulong[]{0x2010250000000000UL,0x0020087802000010UL,0xA065A00800027030UL,0x0000702080098084UL,0x0000003C00000000UL});
    public static readonly BitSet FOLLOW_identifier_in_alias16576 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_stringLiteral_in_alias16606 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_keywordAsIdentifier_in_alias16634 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_identifier_in_alias26689 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000001000000UL});
    public static readonly BitSet FOLLOW_stringLiteral_in_alias26711 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000001000000UL});
    public static readonly BitSet FOLLOW_keywordAsIdentifier_in_alias26733 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000001000000UL});
    public static readonly BitSet FOLLOW_ASSIGNEQUAL_in_alias26759 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_dbObject_in_tableColumns6779 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000002000000UL});
    public static readonly BitSet FOLLOW_DOT_STAR_in_tableColumns6781 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_PLUS_in_column6815 = new BitSet(new ulong[]{0x2010250000000000UL,0x0420087802000010UL,0xA065A00800027030UL,0x0000702080098086UL,0x0000003C04020000UL});
    public static readonly BitSet FOLLOW_dbObject_in_column6832 = new BitSet(new ulong[]{0x0200000000000002UL});
    public static readonly BitSet FOLLOW_LPAREN_in_column6847 = new BitSet(new ulong[]{0x2010250000000000UL,0x0420087802000010UL,0xA065A00800027030UL,0x0000702080098086UL,0x0000003C04020000UL});
    public static readonly BitSet FOLLOW_column_in_column6850 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_column6852 = new BitSet(new ulong[]{0x0200000000000002UL});
    public static readonly BitSet FOLLOW_collate_in_column6866 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_arithMultsOp_in_expression6889 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x000000007C000000UL});
    public static readonly BitSet FOLLOW_set_in_expression6893 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_arithMultsOp_in_expression6916 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x000000007C000000UL});
    public static readonly BitSet FOLLOW_unaryExpr_in_arithMultsOp6937 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000180200000UL});
    public static readonly BitSet FOLLOW_set_in_arithMultsOp6940 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_unaryExpr_in_arithMultsOp6954 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000180200000UL});
    public static readonly BitSet FOLLOW_unaryOperator_in_unaryExpr6973 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_subExpression_in_unaryExpr6976 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_subExpression_in_unaryExpr6984 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_caseFunction_in_subExpression7014 = new BitSet(new ulong[]{0x0200000000000002UL});
    public static readonly BitSet FOLLOW_castFunction_in_subExpression7022 = new BitSet(new ulong[]{0x0200000000000002UL});
    public static readonly BitSet FOLLOW_parameterlessFunction_in_subExpression7030 = new BitSet(new ulong[]{0x0200000000000002UL});
    public static readonly BitSet FOLLOW_constantExpr_in_subExpression7038 = new BitSet(new ulong[]{0x0200000000000002UL});
    public static readonly BitSet FOLLOW_Variable_in_subExpression7046 = new BitSet(new ulong[]{0x0200000000000002UL});
    public static readonly BitSet FOLLOW_function_in_subExpression7060 = new BitSet(new ulong[]{0x0200000000000002UL});
    public static readonly BitSet FOLLOW_LPAREN_in_subExpression7068 = new BitSet(new ulong[]{0x2018250200000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C1C6UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_selectStatement_in_subExpression7089 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_expression_in_subExpression7114 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_subExpression7126 = new BitSet(new ulong[]{0x0200000000000002UL});
    public static readonly BitSet FOLLOW_dbObject_in_subExpression7135 = new BitSet(new ulong[]{0x0200000000000002UL});
    public static readonly BitSet FOLLOW_collate_in_subExpression7152 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_Variable_in_varAssign7178 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000001000000UL});
    public static readonly BitSet FOLLOW_ASSIGNEQUAL_in_varAssign7180 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_varAssign7182 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_expression_in_functionArg7213 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_COMMA_in_functionArg7216 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_functionArg7218 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_STAR_in_functionArg7241 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_ALL_in_functionArg7264 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C72FFFFUL});
    public static readonly BitSet FOLLOW_DISTINCT_in_functionArg7270 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C72FFFFUL});
    public static readonly BitSet FOLLOW_STAR_in_functionArg7274 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_expression_in_functionArg7278 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_varAssign_in_functionArg7306 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_COMMA_in_functionArg7309 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000400000UL});
    public static readonly BitSet FOLLOW_varAssign_in_functionArg7311 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_LEFT_in_function7364 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_RIGHT_in_function7368 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_dbObject_in_function7374 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_LPAREN_in_function7377 = new BitSet(new ulong[]{0x2018250200000000UL,0x0420087802100310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C76FFFFUL});
    public static readonly BitSet FOLLOW_functionArg_in_function7396 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_function7403 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_WHEN_in_caseExpWhen7459 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_caseExpWhen7463 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_THEN_in_caseExpWhen7465 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_caseExpWhen7469 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_WHEN_in_caseSrchWhen7501 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087A02000310UL,0xB065A008001A7130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_searchCondition_in_caseSrchWhen7503 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_THEN_in_caseSrchWhen7505 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_caseSrchWhen7507 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_CASE_in_caseFunction7538 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0A08009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_caseFunction7549 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000008000000000UL});
    public static readonly BitSet FOLLOW_caseExpWhen_in_caseFunction7553 = new BitSet(new ulong[]{0x0000000000000000UL,0x000000000C000000UL,0x0000000000000000UL,0x0000008000000000UL});
    public static readonly BitSet FOLLOW_caseSrchWhen_in_caseFunction7565 = new BitSet(new ulong[]{0x2018250000000000UL,0x042008780E000310UL,0xB065A00800127130UL,0xFFFFF0A08009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_ELSE_in_caseFunction7585 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_caseFunction7589 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000008000000UL});
    public static readonly BitSet FOLLOW_END_in_caseFunction7593 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_CAST_in_castFunction7635 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_LPAREN_in_castFunction7637 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_castFunction7639 = new BitSet(new ulong[]{0x0000002000000000UL});
    public static readonly BitSet FOLLOW_AS_in_castFunction7641 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000003000000000UL});
    public static readonly BitSet FOLLOW_identifier_in_castFunction7643 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000060000UL});
    public static readonly BitSet FOLLOW_LPAREN_in_castFunction7646 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000100000UL});
    public static readonly BitSet FOLLOW_Integer_in_castFunction7650 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x00000000000C0000UL});
    public static readonly BitSet FOLLOW_COMMA_in_castFunction7653 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000100000UL});
    public static readonly BitSet FOLLOW_Integer_in_castFunction7657 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_castFunction7661 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_castFunction7665 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_identifier_in_dbObjectName7704 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_IDENTITYCOL_in_dbObjectName7708 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_ROWGUIDCOL_in_dbObjectName7712 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_keywordAsIdentifier_in_dbObjectName7716 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_dbObjectName_in_dbObject7747 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000200000000UL});
    public static readonly BitSet FOLLOW_DOT_in_dbObject7761 = new BitSet(new ulong[]{0x2010250000000000UL,0x0420087802000010UL,0xA065A00800027030UL,0x0000702080098086UL,0x0000003C00000000UL});
    public static readonly BitSet FOLLOW_dbObjectName_in_dbObject7763 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000200000000UL});
    public static readonly BitSet FOLLOW_DOT_in_dbObject7783 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000200000000UL});
    public static readonly BitSet FOLLOW_DOT_in_dbObject7785 = new BitSet(new ulong[]{0x2010250000000000UL,0x0420087802000010UL,0xA065A00800027030UL,0x0000702080098086UL,0x0000003C00000000UL});
    public static readonly BitSet FOLLOW_dbObjectName_in_dbObject7787 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000200000000UL});
    public static readonly BitSet FOLLOW_set_in_parameterlessFunction0 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_systemVariable0 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_keywordAsIdentifier8159 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_stringLiteral0 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_identifier0 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_constant_in_constantExpr8548 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_Integer_in_constant8573 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_Real_in_constant8581 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_NULL_in_constant8589 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_stringLiteral_in_constant8597 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_HexLiteral_in_constant8605 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_Currency_in_constant8613 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_ODBCDateTime_in_constant8621 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_systemVariable_in_constant8629 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_PLUS_in_unaryOperator8646 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_MINUS_in_unaryOperator8660 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_TILDE_in_unaryOperator8674 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_arithmeticOperator_in_binaryOperator8701 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_bitwiseOperator_in_binaryOperator8705 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_arithmeticOperator0 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_bitwiseOperator0 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_comparisonOperator0 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_logicalOperator0 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_UNION_in_unionOperator8908 = new BitSet(new ulong[]{0x0000000200000002UL});
    public static readonly BitSet FOLLOW_ALL_in_unionOperator8911 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_LPAREN_in_synpred57_Sql4433 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087A02000310UL,0xB065A008001A7130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_searchCondition_in_synpred57_Sql4444 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000040000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_synpred57_Sql4448 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_selectStatement_in_synpred68_Sql4939 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_alias2_in_synpred78_Sql5282 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_alias2_in_synpred79_Sql5300 = new BitSet(new ulong[]{0x2010250000000000UL,0x0420087802000010UL,0xA065A00800027030UL,0x0000702080098086UL,0x0000003C00000000UL});
    public static readonly BitSet FOLLOW_dbObject_in_synpred79_Sql5302 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_COMMA_in_synpred79_Sql5304 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_alias2_in_synpred81_Sql5344 = new BitSet(new ulong[]{0x2010250000000000UL,0x0420087802000010UL,0xA065A00800027030UL,0x0000702080098086UL,0x0000003C00000000UL});
    public static readonly BitSet FOLLOW_dbObject_in_synpred81_Sql5346 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x00000401FC220000UL});
    public static readonly BitSet FOLLOW_binaryOperator_in_synpred81_Sql5349 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_LPAREN_in_synpred81_Sql5353 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_alias2_in_synpred82_Sql5394 = new BitSet(new ulong[]{0x2010250000000000UL,0x0420087802000010UL,0xA065A00800027030UL,0x0000702080098086UL,0x0000003C04020000UL});
    public static readonly BitSet FOLLOW_column_in_synpred82_Sql5396 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_alias2_in_synpred83_Sql5436 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_expression_in_synpred83_Sql5438 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_tableColumns_in_synpred84_Sql5492 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_dbObject_in_synpred86_Sql5530 = new BitSet(new ulong[]{0x2010252000000000UL,0x0020087802000010UL,0xA065A00800027030UL,0x0000702080098084UL,0x0000003C00080000UL});
    public static readonly BitSet FOLLOW_alias1_in_synpred86_Sql5533 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000080000UL});
    public static readonly BitSet FOLLOW_COMMA_in_synpred86_Sql5537 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_dbObject_in_synpred89_Sql5571 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x00000401FC220000UL});
    public static readonly BitSet FOLLOW_binaryOperator_in_synpred89_Sql5574 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_LPAREN_in_synpred89_Sql5578 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_column_in_synpred91_Sql5626 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_expression_in_synpred93_Sql5660 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_joinedTables_in_synpred101_Sql5876 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_joinedTables_in_synpred102_Sql5940 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_queryExpression_in_synpred103_Sql5978 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_alias1_in_synpred105_Sql6043 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_function_in_synpred106_Sql6040 = new BitSet(new ulong[]{0x2010252000000002UL,0x0020087802000010UL,0xA065A00800027030UL,0x0000702080098084UL,0x0000003C00000000UL});
    public static readonly BitSet FOLLOW_alias1_in_synpred106_Sql6043 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_alias1_in_synpred107_Sql6077 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_dbObject_in_synpred111_Sql6074 = new BitSet(new ulong[]{0x2010252000000002UL,0x0020087802000010UL,0xA065A00800027030UL,0x0000742080098084UL,0x0000003C00020000UL});
    public static readonly BitSet FOLLOW_alias1_in_synpred111_Sql6077 = new BitSet(new ulong[]{0x0000000000000002UL,0x0000000000000000UL,0x0000000000000000UL,0x0000040000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_WITH_in_synpred111_Sql6084 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000020000UL});
    public static readonly BitSet FOLLOW_LPAREN_in_synpred111_Sql6088 = new BitSet(new ulong[]{0x0000000000000000UL,0x2080004000000000UL,0x0045800800020000UL,0x0000100080018084UL});
    public static readonly BitSet FOLLOW_tableHint_in_synpred111_Sql6090 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x00000000000C0000UL});
    public static readonly BitSet FOLLOW_COMMA_in_synpred111_Sql6093 = new BitSet(new ulong[]{0x0000000000000000UL,0x2080004000000000UL,0x0045800800020000UL,0x0000100080018084UL});
    public static readonly BitSet FOLLOW_tableHint_in_synpred111_Sql6095 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x00000000000C0000UL});
    public static readonly BitSet FOLLOW_RPAREN_in_synpred111_Sql6099 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_alias1_in_synpred112_Sql6128 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_alias1_in_synpred114_Sql6167 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_synpred151_Sql6893 = new BitSet(new ulong[]{0x2018250000000000UL,0x0420087802000310UL,0xB065A00800127130UL,0xFFFFF0208009C186UL,0x000007FC0C52FFFFUL});
    public static readonly BitSet FOLLOW_arithMultsOp_in_synpred151_Sql6916 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_castFunction_in_synpred157_Sql7022 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_function_in_synpred161_Sql7055 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_selectStatement_in_synpred162_Sql7084 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_DOT_in_synpred185_Sql7776 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000000000000UL,0x0000000200000000UL});
    public static readonly BitSet FOLLOW_DOT_in_synpred185_Sql7778 = new BitSet(new ulong[]{0x0000000000000002UL});

}
}